如何在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”方法的主要内容,如果未能解决你的问题,请参考以下文章
Django Admin Cookbook-20如何删除模型的“添加”/“删除”按钮
使用 Django 的 ORM 和 Django Rest Framework 序列化嵌套关系的查询集的正确方法?