django - Django 中的动态文件路径

标签 django django-models

我正在尝试在 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/

相关文章:

python - 如何在 Django 中重定向(包括 URL 更改)?

django - App Engine/Django - 交错多个请求干扰 GAE session

python - 如何使用 django-authopenid 设置默认组?

python - django 模型中的 m2m 'through' 字段抛出此错误 : 'M2M field' object has no attribute '_m2m_reverse_name_cache'

python - 在 Django 中定义自定义模型字段的覆盖方法

python - 使用 Django 从 S3 提供静态页面

jquery 月份选择器 : setting an initial min/max range conflicts with "from" <"to" function

django - ordery_by 过滤器在 django 中无法正常工作

python - 如何在 django 1.8 中获取所有模型

django - 应用程序名称附加到 Django 中的表名