在Django中调用save之前检测模型是否已更改

时间:2011-03-09 02:31:56

标签: python django django-models

我有一个基于远程数据更改(通过HTML scraper)更新的数据库模型。

我想维护一个名为changed的字段 - 一个时间戳,表示上一次模型的值与之前的值相比发生了变化(请注意,这与auto_now不同,因为这些字段每次更新时间模型的save方法被调用。)

这是我的问题:

在模型的save方法中,是否有一种直接的方法来检测模型实例的当前值是否与数据库中的值不同?或者,有没有其他方法可以轻松维护changed时间戳?

5 个答案:

答案 0 :(得分:34)

如果您通过表单保存实例,则可以查看form.has_changed()

答案 1 :(得分:10)

http://code.activestate.com/pypm/django-dirtyfields/

跟踪django模型实例上的脏/更改字段。

答案 2 :(得分:3)

您可以尝试在保存时计算记录值的校验和。然后,当您稍后阅读它时,重新计算校验和并查看它是否已更改。也许是Python crc32标准模块中的zlib函数。 (我不确定这会有什么样的表现。所以你可能想调查一下。)

答案 3 :(得分:1)

听起来像你想要的是信号:http://docs.djangoproject.com/en/1.2/topics/signals/

您可以使用post_save信号更新另一个模型中的相关字段以存储先前的值。然后在接下来的回合中,您可以进行比较。

答案 4 :(得分:0)

此库具有跟踪FK查找。

https://github.com/mmilkin/django_dirty_bits