Django检测到具有相同文件名的ImageField

时间:2012-09-17 14:10:20

标签: django

我正在尝试检测对ImageField的更改,以便以Hg编程同步更改。包含ImageField的模型正在使用Django-multilingual进行本地化,因此我必须单独检测每个字段的更改,而不是仅假设每次都更改文件。

我正在使用前置和后置保存信号来完成此操作,将实例保存在预先保存中并检测保存后字段值的更改。这适用于使用不同文件名的图像添加,删除或更改图像时。但是,当我上传相同文件名的图像时,我的代码无法检测到图像实际发生了变化,因此没有文件更改与Hg同步。

我希望能够为旧文件生成校验和(我很容易知道它来自presave实例),并将其与新文件的校验和进行比较(不像试图拉动那样容易)从字段值开始将我带到旧文件中。

如果我有办法找到新上传的文件(大概是在内存中,因为Django没有临时保存2.5MB以下的文件),并将其保存到临时目录,我很容易生成一个校验和。但是,我不确定从哪里获取文件。

在post_save信号中我可以从哪里获取文件?或者是否有另一种方法来完成我没有想到的变化检测?

谢谢, 富

1 个答案:

答案 0 :(得分:2)

添加此代码段“

def has_changed(instance, field):
        if not instance.pk:
            return False
        old_value = instance.__class__._default_manager.\
                 filter(pk=instance.pk).values(field).get()[field]
        return not getattr(instance, field) == old_value

然后在你的保存

def save(self, *args, **kwargs):
            if has_changed(self, 'field_here'):

            super(Sneetch, self).save(*args, **kwargs)