我正在尝试检测对ImageField的更改,以便以Hg编程同步更改。包含ImageField的模型正在使用Django-multilingual进行本地化,因此我必须单独检测每个字段的更改,而不是仅假设每次都更改文件。
我正在使用前置和后置保存信号来完成此操作,将实例保存在预先保存中并检测保存后字段值的更改。这适用于使用不同文件名的图像添加,删除或更改图像时。但是,当我上传相同文件名的图像时,我的代码无法检测到图像实际发生了变化,因此没有文件更改与Hg同步。
我希望能够为旧文件生成校验和(我很容易知道它来自presave实例),并将其与新文件的校验和进行比较(不像试图拉动那样容易)从字段值开始将我带到旧文件中。
如果我有办法找到新上传的文件(大概是在内存中,因为Django没有临时保存2.5MB以下的文件),并将其保存到临时目录,我很容易生成一个校验和。但是,我不确定从哪里获取文件。
在post_save信号中我可以从哪里获取文件?或者是否有另一种方法来完成我没有想到的变化检测?
谢谢, 富
答案 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)