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

问题描述 投票:5回答:3

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

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

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

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

django set
3个回答
4
投票

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


0
投票

我想你正在寻找RelatedManager Class


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.