Django管理员删除图像(错误或错误)

时间:2014-01-24 21:05:05

标签: python django django-models django-admin

删除图像后,我需要将其从文件系统中删除。 我为此使用了信号。 它运作良好,直到我发现一些奇怪的行为。 如果在django admin中我选择另一个文件(所以,我更改图像文件)并同时选择删除图像,然后图像不会从文件系统中删除/看起来django试图删除POST数据中的文件。

有没有办法删除旧文件?

1 个答案:

答案 0 :(得分:0)

如果我正确理解您的问题,您需要在Django admin中替换图像时删除旧图像。

对于此,删除信号将无济于事,因为模型实例永远不会被删除,但只更改了一个属性。为此,您需要一种方法来确定模型实例在保存时是否脏(任何字段已更改)。

您可以使用django-dirtyfields执行此操作。

class FooModel(DirtyFieldsMixin, models.Model):
    image = models.ImageField(upload_to='...')
    ...

def changeremove(sender, instance, *args, **kwargs):
    if instance.is_dirty():
        name = 'image'
        new = getattr(instance, name)
        old = instance.get_dirty_fields().get(name, None)
        if old:
            old.delete(save=False)
            setattr(instance, name, new)

post_save.connect(changeremove, sender=FooModel)