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

时间:2010-05-21 10:46:21

标签: django set

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

修改以获取Xavier提供更多详细信息的请求:您可以轻松覆盖模型的save方法,只需定义它并调用“超级save”即可通过一些额外的功能正确保存。但我想知道在哪里覆盖相关集合的add方法。

天哪,我想我还没有提供任何进一步的细节,但我认为即使从第一段开始我也想要做什么。

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

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:0)

我认为你正在寻找RelatedManager Class

答案 2 :(得分:0)

经过大量搜索(感谢Paul的提示),我遇到了snippet这有助于解释m2m_changed实现拦截而不是覆盖了ManyRelatedManager。看起来多对多关系的经理会在飞行中发生,因此覆盖该方法并非易事。