python - 保存整个模型后的 Django 信号

标签 python django signals

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

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

在所有ManyToMany字段被保存后,不是有信号触发吗?

最佳答案

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

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

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

关于python - 保存整个模型后的 Django 信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15971821/

相关文章:

python - Django allauth 访问 View

python - 运行 django 本地服务器而不是在 shell 别名中打开 chrome 页面

python - Python 迭代器是否正式需要 __iter__ 方法?

python - 如何使用大小为 m 的滑动窗口将 numpy 数组划分为 n 个子数组?

python - matplotlib.close() 不关闭绘图

python - Django REST - 如何获取具有两个模型的 JSON?

c - 如何修复 pid 取反时 kill 函数的 'No such process' 错误

qt - 临时阻塞两个 QObject 之间的信号

c - OpenMP 并行程序中的信号处理

python - 将元组分配给 pandas 数据帧的多个元素