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

yam*_*han 0 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 + "/")
Run Code Online (Sandbox Code Playgroud)

我想将图像上传到一个组的目录.例如,如果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

Lud*_*mer 6

所述upload_to参数可以是一个函数,如文档中描述:

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)
Run Code Online (Sandbox Code Playgroud)

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

上面的示例使用基于组的数字ID的目录.您可以使用显然其他领域,例如使用蛞蝓(如果有的话),只需更换instance.group.idinstance.group.slug.