【问题标题】:Django media_url is not correct for filefieldDjango media_url 对于文件字段不正确
【发布时间】:2021-06-06 18:49:53
【问题描述】:

我有一个 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

【问题讨论】:

    标签: python django media-url


    【解决方案1】:

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

    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()
    

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

    【讨论】:

      猜你喜欢
      • 2018-07-31
      • 2014-07-24
      • 2019-12-13
      • 2018-11-14
      • 2011-06-16
      • 2011-07-27
      • 2012-09-03
      • 2023-01-09
      相关资源
      最近更新 更多