我可以在应用 ManyToManyField 突变之前检测它们吗?

Can I detect ManyToManyField mutations before they are applied?

我有一个 Django 应用程序,它可以将某些模型的更改广播给它的客户端,让它们保持最新状态。 我有一个单独的应用程序,它绑定到这些模型的 post_save 信号并触发广播。

ManyToManyFields 的模型出现了问题。我不太熟悉 Django 对此的处理,但我知道这些字段实际上是在模型保存后更新的。

我能够使用 m2m_changed 信号对 post_* 操作做出反应,并在对象全部更新后发送广播。但是,在 post_save 处理程序中,我仍然需要检测 m2m 字段是否会发生变异,以避免广播不完整的数据。我如何在 post_save 信号处理程序或模型的 save 方法中检测到这一点?当 m2m 字段即将发生变异时,有没有办法在对象上升起标志?

这是我试过的方法:

非常感谢您的帮助。

我终于解决了这个问题。供参考:

TL;DR: 模型层不是执行此操作的正确位置;视图层是。

我在视图层重新实现了通知系统,而不是在模型层。我制作了一个 mixin,将通知功能添加到我的视图中。 感谢这个解决方案:

  • 我摆脱了信号
  • 我可以更好地控制正在发生的事情,这大大简化了通知处理程序代码。