django替换ImageField上传的旧图像

时间:2014-01-27 23:09:20

标签: python django

如何将ImageField(在我的模型中)上传的一个图像替换为由同一个ImageField选择的新图像?

并且,当我删除模型对象(批量删除)时,是否可以删除由ImageField上传的所有图像?

2 个答案:

答案 0 :(得分:1)

这可能会变得棘手, 很多时候取决于你的约束条件。 1.为模型编写自己的保存方法,然后删除旧图像a并替换为新图像。      os.popen(“rm%s”%str(info.photo.path))

  1. 编写一个cron作业来清除所有未引用的文件。但是,如果磁盘空间是一个问题,你可能想要做第一个,这将使你的页面加载延迟。

答案 1 :(得分:1)

经过数小时的搜索,我找到了这段代码。 它在Django 3中对我有用

class Image(models.Model):
    image = models.ImageField()

    def save(self, *args, **kwargs):
        try:
            this = Image.objects.get(id=self.id)
            if this.image != self.image:
                this.image.delete(save=False)
        except:
            pass  # when new photo then we do nothing, normal case
        super().save(*args, **kwargs)