【问题标题】:django change image file location with setattrdjango 使用 setattr 更改图像文件位置
【发布时间】:2026-02-08 00:20:04
【问题描述】:

在我的项目中,我有一个带有学校模型和学校建议模型的应用程序。

学校模型具有各种图像的字段,例如徽标、印章等:

seal_image = models.ImageField(upload_to="sealimgs", null=True, blank=True)
logo_image = models.ImageField(upload_to="logos", null=True, blank=True)

schoolsuggestion 模型有一个字段表示对应的学校字段是什么,还有一个图像字段。

field_name = models.CharField(max_length=255, default="")
image_field = models.ImageField(upload_to='img', null=True, blank=True)

当学校建议被批准后,我覆盖了 save 以便它通过 getattr(field_name) 获取关联学校的字段并使用 setattr(field_name, image_field) 设置它(我正在简化语法,但你明白了)。

问题是,文件仍然保存在 img 中,大概是因为我使用的是 setattr 而不是图像字段特定的保存,它会将其上传到正确的目录。

那么我该怎么做呢?这是有道理的,我可能会以某种方式获取属性的 upload_to 值,以某种方式使用该文件路径重新保存图像,然后在重新保存的图像上使用 setattr,但我不知道如何做前两个。

【问题讨论】:

    标签: python django image django-models


    【解决方案1】:

    我修改了上传到这个函数,并包含在类def上面的文件中:

    def get_upload_to(instance, filename):
        return School._meta.get_field(instance.field_name).upload_to+"/"+filename
    

    【讨论】:

    • 那么你的问题是如何通过实例访问模型字段而不是实例字段值,对吧?
    • 如果是这样,您的解决方案很好。也可以使用os.path.join 连接路径。