整个模型保存后的Django信号

git*_*rik 7 python django signals

我有一个包含2个ManyToMany字段的Django模型.我想在每次保存时处理模型中的数据.

post_save它保存在之前发送信号ManyToMany的关系,所以我不能使用的.然后你有m2m_changed信号,但由于我有2个ManyToMany字段,我不能确定ManyToMany我应该把信号放在哪个字段上.

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

Jer*_*ers 3

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

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

在您的情况下, ifm2m_changedneeds_processingis False,您可以设置needs_processingTrue保存模型,将其标记为由任务队列处理。然后,即使第二个m2m_changed针对其他 m2m 字段触发,也不会产生重复的处理成本。