Django model.save():检查是否有任何改变

时间:2014-05-09 15:26:14

标签: python django

问题很简单:

有没有办法检查是否在model.save()方法中修改了实例的任何字段?或者也许是其他方法,.clean()?

关键是您无法明确命名字段以进行检查。

有没有简单的方法呢?

1 个答案:

答案 0 :(得分:1)

获取所有字段名称的方法:

[field.name for field in MODEL._meta.fields]

按字段名称检查字段值的方式为字符串:

getattr(obj, field_name)

因此您可以像这样修改此Django: When saving, how can you check if a field has changed?答案:

def save(self, *args, **kw):
    if self.pk is not None:
        orig = MyModel.objects.get(pk=self.pk)
        field_names = [field.name for field in MyModel._meta.fields]
        fields_stats = {}
        for field_name in field_names:
            fields_stats[field_name] = getattr(orig, field_name) != getattr(self, field_name)
    super(MyModel, self).save(*args, **kw)

字典field_stats就像

{
    'field_name1': True,
    'field_name1': False,
}

True表示字段已更改,False表示字段未更改