繁体   English   中英

Django media_url 对于文件字段不正确

[英]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

所以我一直在尝试不同的事情并找到了答案。
所以你有两个选择:

  1. 将保存过程交给 Django。
  2. 从 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()

这就像上面的方法,但您只是手动配置它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM