我有一个包含 2 个 ManyToMany
字段的 Django 模型。我想在每次保存时处理来自模型的数据。
post_save
信号在保存 ManyToMany
关系之前发送,所以我不能使用那个。然后你有 m2m_changed
信号,但由于我有 2 个 ManyToMany
字段,我不能确定我应该在哪个 ManyToMany
字段上放置信号。
在所有ManyToMany
字段被保存后,不是有信号触发吗?
最佳答案
我觉得唯一的选择是在每次 m2m_change
之后处理数据,因为似乎没有事件或信号映射到“此模型上的所有相关数据已完成保存”
如果这是高成本,您可以异步处理。当我遇到类似情况时,我在模型中添加了一个 bool 字段来处理与处理相关的状态(例如,MyModel.needs_processing
)和一个单独的异步任务队列(Celery,在我的例子中)将每分钟扫描一次并处理处理/状态重置。
在您的情况下,如果 m2m_changed
和 needs_processing
为 False
,您可以将 needs_processing
设置为 True
并保存模型,将其标记为由任务队列处理。然后,即使第二个 m2m_changed
为另一个 m2m 字段触发,也不会产生重复的处理成本。
关于python - 保存整个模型后的 Django 信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15971821/