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 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。例如:

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中的动态文件路径 的全部内容, 来源链接: utcz.com/qa/419196.html

回到顶部