如何在Django中覆盖相关集的“add”方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Django中覆盖相关集的“add”方法相关的知识,希望对你有一定的参考价值。

我正在研究一个Django项目,我希望在某些模型的相关集合中添加一些信号时发送信号。例如。我们有一个拥有一组收藏品的所有者,每次调用owner.collectable_set.add(something)方法时,我都想要像collectable_added这样的信号。信号对我来说很清楚,但我不知道哪个管理器(?)包含我想要覆盖的“添加”方法。

编辑Xavier的请求以提供更多细节:您可以轻松覆盖模型的save方法,只需定义它并调用“super-save”,以便通过一些额外的功能正确保存。但我想知道在哪里覆盖相关集合的add方法。

天哪,我想我没有带来任何进一步的细节,但我认为应该清楚我想做什么,即使从第一段开始。

编辑2:This是我想要覆盖的方法。是否建议这样做,或者您是否建议采用其他方式发送信号?

答案

这是我找到的解决方案,m2m_changed signal。我找了一些搜索和阅读。此外,我发现扩展ManyRelatedManager类并不是一件容易的事情,这本来是另一种选择。但是使用m2m_changed信号,我可以依赖内置函数,这是大多数时候的首选方式。

另一答案

我想你正在寻找RelatedManager Class

另一答案

经过多次搜索(感谢Paul的提示),我遇到了这个snippet,它帮助解释了m2m_changed实现,以拦截不覆盖ManyRelatedManager上的add方法。看起来多对多关系的管理者在运行中发生,因此覆盖该方法并非易事。

以上是关于如何在Django中覆盖相关集的“add”方法的主要内容,如果未能解决你的问题,请参考以下文章

如何在fabric js中覆盖canvas.add()方法

Django Admin Cookbook-20如何删除模型的“添加”/“删除”按钮

使用 Django 的 ORM 和 Django Rest Framework 序列化嵌套关系的查询集的正确方法?

Django - 如何获取与另一个字段相关的upload_to目录

django 查询所有与相关集的过滤?

在 Django 中检查空查询集的正确方法是啥?