我正在研究一个Django项目,我希望在某些模型的相关集添加某些内容时发送信号。例如。我们有一个拥有一组收藏品的所有者,每次调用方法owner.collectable_set.add(something)
时,我想要一个像collectable_added
之类的信号。信号很清楚,但我不知道哪个管理器(?)包含我想要覆盖的“添加”方法。
修改以获取Xavier提供更多详细信息的请求:您可以轻松覆盖模型的save
方法,只需定义它并调用“超级save
”即可通过一些额外的功能正确保存。但我想知道在哪里覆盖相关集合的add
方法。
天哪,我想我还没有提供任何进一步的细节,但我认为即使从第一段开始我也想要做什么。
编辑2: This是我要覆盖的方法。是否建议这样做,或者您是否建议采用其他方式发送信号?
答案 0 :(得分:4)
这是我找到的解决方案m2m_changed
signal。我找了一些搜索和阅读。此外,我发现扩展ManyRelatedManager
类并不是一件轻而易举的事情,这本来是另一种选择。但是使用m2m_changed
信号,我可以依赖内置函数,这是大多数时候首选的函数。
答案 1 :(得分:0)
我认为你正在寻找RelatedManager Class。
答案 2 :(得分:0)
经过大量搜索(感谢Paul的提示),我遇到了snippet这有助于解释m2m_changed实现拦截而不是覆盖了ManyRelatedManager。看起来多对多关系的经理会在飞行中发生,因此覆盖该方法并非易事。