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

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

  1. 把保存过程交给Django
  2. 删除 URL.
  3. 开头的 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()

这和上面的方法一样,只是你手动配置而已。