【问题标题】:How can I set variable in the path of ImageField of Django?如何在 Django 的 ImageField 路径中设置变量?
【发布时间】:2016-03-22 08:38:37
【问题描述】:

这是我的models.py

class Group_Photo(models.Model):

    group_id = models.ForeignKey(Group)
    photo = models.ImageField(upload_to="static/image/group/" + group_id + "/")

我想将图片上传到一个群组目录。 例如,如果group_id = 3

upload_to="static/image/group/3/"

我该怎么办?

对不起,这是错误。

文件“/models.py”,第 161 行,在 Group_Photo 中 photo = models.ImageField(upload_to="static/image/group/" + group_id + "/") TypeError: Can't convert 'ForeignKey' object to str 隐含的

【问题讨论】:

  • 这段代码会产生错误吗?当你尝试运行你的代码时它会输出什么?
  • @Renier 对不起,我忘了写错误。我加了。
  • @有人说“不,你不能”如果我不能在多个目录中上传图片,我只能在一个目录中上传吗?

标签: python django django-models


【解决方案1】:

upload_to 参数可以是一个函数,as described in the documentation

def group_based_upload_to(instance, filename):
    return "image/group/{}/{}".format(instance.group.id, filename)

class Group_Photo(models.Model):
    group = models.ForeignKey(Group)
    photo = models.ImageField(upload_to=group_based_upload_to)

该函数有两个参数 - 文件附加到的模型实例和文件的原始名称。它必须返回一个相对路径,文件将被保存。它将附加到MEDIA_ROOT 设置中定义的路径。

上面的示例使用基于组的数字 id 的目录。您显然可以使用其他字段,例如使用 slug(如果有的话)只需将 instance.group.id 替换为 instance.group.slug

【讨论】:

  • 非常感谢。我的日本文件没有提到这一点。我现在就试试。
  • 谢谢。当我开始使用 runserver 时,没有发生错误。稍后我会实现上传表单。
猜你喜欢
  • 1970-01-01
  • 2013-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-26
  • 1970-01-01
  • 2011-11-21
相关资源
最近更新 更多