如何在Django的ImageField路径中设置变量?

时间:2016-03-22 08:38:37

标签: python django django-models

这是我的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:无法将'ForeignKey'对象转换为str   隐式

1 个答案:

答案 0 :(得分:6)

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