我正在尝试在 Django 中生成动态文件路径。我想制作一个这样的文件系统:
-- user_12
--- photo_1
--- photo_2
--- user_ 13
---- photo_1
我发现了一个相关问题:Django Custom image upload field with dynamic path
在这里,他们说我们可以更改 upload_to 路径并导致 https://docs.djangoproject.com/en/stable/topics/files/医生。在文档中,有一个示例:
from django.db import models
from django.core.files.storage import FileSystemStorage
fs = FileSystemStorage(location='/media/photos')
class Car(models.Model):
...
photo = models.ImageField(storage=fs)
但是,这仍然不是动态的,我想将 Car id 赋予图像名称,并且我无法在 Car 定义完成之前分配 id。那么如何创建带有汽车 ID 的路径?
最佳答案
您可以在 upload_to
参数中使用可调用对象,而不是使用自定义存储。查看docs ,并注意那里的警告,即调用该函数时可能尚未设置主键。发生这种情况是因为可能会在将对象保存到数据库之前处理上传,因此可能无法使用 ID
。您可能需要考虑在模型上使用另一个字段,例如 slug。例如:
import os
def get_upload_path(instance, filename):
return os.path.join(
"user_%d" % instance.owner.id, "car_%s" % instance.slug, filename)
然后:
photo = models.ImageField(upload_to=get_upload_path)
关于django - Django 中的动态文件路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5135556/