我有一个带有2个ManyToMany
字段的Django模型。我希望每次保存时都能处理模型中的数据。
post_save
信号在保存ManyToMany
关系之前发送,因此我无法使用该信号。然后你有m2m_changed
信号,但由于我有2 ManyToMany
个字段,我无法确定哪个ManyToMany
字段应该放置信号。
在保存所有ManyToMany
字段后是否没有触发信号?
答案 0 :(得分:3)
我觉得唯一的选择是在每m2m_change
之后处理数据,因为似乎没有映射到“此模型上的所有相关数据已完成保存的事件或信号。” / p>
如果这是高成本,您可以异步处理处理。当我遇到类似的情况时,我向模型添加了一个布尔字段来处理与处理相关的状态(例如,MyModel.needs_processing
)和一个单独的异步任务队列(在我的例子中是Celery)将扫描每一分钟并处理处理/状态重置。
在您的情况下,如果m2m_changed
和needs_processing
为False
,您可以将needs_processing
设置为True
并保存模型,将其标记为由你的任务队列。然后,即使第二个m2m_changed
为另一个m2m字段触发,也不会产生重复的处理成本。