我正在尝试在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 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参数中使用callable 而不是使用自定义存储。请参阅docs,并注意那里的警告,即在调用函数时可能尚未设置主键(因为可能在将对象保存到数据库之前处理了上载),因此ID可能无法使用。你可能希望考虑在模型上使用其他字段,例如slug。例如:
upload_to
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)