[英]Django media_url is not correct for filefield
我有一个带有 model 的 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)
在这个 model 中, output_file是在服务器处理后由应用程序保存的文件(用户不直接为该字段上传文件)。 该文件保存在MEDIA_ROOT中的某个位置。
我的MEDIA_ROOT = " /var/www/media/ " 和MEDIA_URL =" /media/ " 和文件例如保存在 " /var/www/media/items/file.txt " 中。
当我序列化这个 model 时,我得到以下结果作为响应 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
所以我一直在尝试不同的事情并找到了答案。
所以你有两个选择:
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()
这就像上面的方法,但您只是手动配置它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.