簡體   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