对django模型状态修改执行操作

时间:2012-02-06 13:08:13

标签: django django-models django-signals

我几天都被困在这个问题上了。如何在更新对象的状态时执行特定操作?

我有一个Order django模型,其中包含status字段。当订单状态从new变为processed时,我需要执行一些特定操作。

问题是,状态可以从任何地方更新:前端视图,管理模块,批量操作,管理命令等。

另外,我只希望在保存订单后执行操作。

似乎post_save信号可以正常工作,但我找不到一种方法来检测状态是否已经改变,以及旧值是什么。

我检查了django fsm, but it's clearly not the way to go

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

要检测post_save信号中哪些字段已更改,您需要记住模型实例的原始状态。 Actions triggered by field change in Django的一个答案是考虑到这一点,并指向Dirty fields in django,您可以在其中找到各种混音,以便您在保存时找到模型中的“脏”字段。