整个模型保存后的Django信号

时间:2013-04-12 12:47:20

标签: python django signals

我有一个带有2个ManyToMany字段的Django模型。我希望每次保存时都能处理模型中的数据。

post_save信号在保存ManyToMany关系之前发送,因此我无法使用该信号。然后你有m2m_changed信号,但由于我有2 ManyToMany个字段,我无法确定哪个ManyToMany字段应该放置信号。

在保存所有ManyToMany字段后是否没有触发信号?

1 个答案:

答案 0 :(得分:3)

我觉得唯一的选择是在每m2m_change之后处理数据,因为似乎没有映射到“此模型上的所有相关数据已完成保存的事件或信号。” / p>

如果这是高成本,您可以异步处理处理。当我遇到类似的情况时,我向模型添加了一个布尔字段来处理与处理相关的状态(例如,MyModel.needs_processing)和一个单独的异步任务队列(在我的例子中是Celery)将扫描每一分钟并处理处理/状态重置。

在您的情况下,如果m2m_changedneeds_processingFalse,您可以将needs_processing设置为True并保存模型,将其标记为由你的任务队列。然后,即使第二个m2m_changed为另一个m2m字段触发,也不会产生重复的处理成本。