Django中的动态文件路径
我正在尝试在Django中生成动态文件路径。我想制作一个像这样的文件系统:
-- user_12 --- photo_1
--- photo_2
--- user_ 13
---- photo_1
我发现了一个相关的问题:具有动态路径的Django自定义图像上传字段
在这里,他们说我们可以更改upload_to路径,并指向https://docs.djangoproject.com/en/stable/topics/files/ doc。在文档中,有一个示例:
from django.db import modelsfrom 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
参数中使用callable 而不是使用自定义存储。请参阅docs,并注意那里的警告,即在调用函数时可能尚未设置主键(因为可能在将对象保存到数据库之前处理了上载),因此ID可能无法使用。你可能希望考虑在模型上使用其他字段,例如slug。例如:
import osdef 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中的动态文件路径 的全部内容, 来源链接: utcz.com/qa/419196.html