Django media_url 对于文件字段不正确
Django media_url is not correct for filefield
我有一个 DRF 项目,其模型如下:
class MyModel(models.Model):
id = models.UUIDField(default=uuid4, primary_key=True, unique=True)
output_file = models.FileField(null=True, blank=True, max_length=200)
geometry = models.PolygonField()
created_at = models.DateTimeField(auto_now_add=True)
在这个模型中,output_file是在服务器端处理后,由应用程序保存的文件(用户不直接上传该字段的文件) .此文件保存在 MEDIA_ROOT.
中的某处
我的 MEDIA_ROOT = "/var/www/media/" 和 MEDIA_URL="/media/" 文件保存在例如“/var/www/media/items/file.txt”中。
当我序列化这个模型时,我得到以下结果作为响应 json:
{
"id": "b2544986-4cfd-****-b349-defd3db****",
"output_file": "/media/var/www/media/items/file.txt",
"geometry": "something",
"created_at": "2021-03-08T19:55:42.068976+03:30"
}
如您所见,URL 开头的 /media/ 变得多余了。
我的意思是 URL 必须是:
/media/items/file.txt
但我得到:
/media/var/www/media/items/file.txt.
我的问题是什么,我该如何解决?
感谢您的帮助:D
所以我一直在尝试不同的事情并找到了答案。
所以你有两个选择:
- 把保存过程交给Django
- 删除 URL.
开头的 MEDIA_ROOT
第一个选项
from django.core.files import File
obj = MyModel.object.create(**kwargs)
with open(path) as f:
obj.output_file.save(new_name, File(f))
这会将文件保存在 /media/items/file.txt 中,并重定向到 /var/www/media/items/file.txt
第二个选项
obj.output_file = path.replace('/var/www/media/', '/media/')
obj.save()
这和上面的方法一样,只是你手动配置而已。
我有一个 DRF 项目,其模型如下:
class MyModel(models.Model):
id = models.UUIDField(default=uuid4, primary_key=True, unique=True)
output_file = models.FileField(null=True, blank=True, max_length=200)
geometry = models.PolygonField()
created_at = models.DateTimeField(auto_now_add=True)
在这个模型中,output_file是在服务器端处理后,由应用程序保存的文件(用户不直接上传该字段的文件) .此文件保存在 MEDIA_ROOT.
中的某处
我的 MEDIA_ROOT = "/var/www/media/" 和 MEDIA_URL="/media/" 文件保存在例如“/var/www/media/items/file.txt”中。
当我序列化这个模型时,我得到以下结果作为响应 json:
{
"id": "b2544986-4cfd-****-b349-defd3db****",
"output_file": "/media/var/www/media/items/file.txt",
"geometry": "something",
"created_at": "2021-03-08T19:55:42.068976+03:30"
}
如您所见,URL 开头的 /media/ 变得多余了。
我的意思是 URL 必须是:
/media/items/file.txt
但我得到:
/media/var/www/media/items/file.txt.
我的问题是什么,我该如何解决?
感谢您的帮助:D
所以我一直在尝试不同的事情并找到了答案。
所以你有两个选择:
- 把保存过程交给Django
- 删除 URL. 开头的 MEDIA_ROOT
第一个选项
from django.core.files import File
obj = MyModel.object.create(**kwargs)
with open(path) as f:
obj.output_file.save(new_name, File(f))
这会将文件保存在 /media/items/file.txt 中,并重定向到 /var/www/media/items/file.txt
第二个选项
obj.output_file = path.replace('/var/www/media/', '/media/')
obj.save()
这和上面的方法一样,只是你手动配置而已。