我最近开始在我的Django项目中使用信号(v.1.3)并且它们都工作正常,除了我无法弄清楚为什么m2m_changed信号永远不会在我的模型上被触发 . 通过在django管理表单上添加/删除PageChild内联实例来编辑Section实例 .
我尝试按照文档中的描述注册回调函数,但没有得到任何结果 .
摘自我的models.py
from django.db import models
from django.db.models.signals import m2m_changed
class Section(models.Model):
name = models.CharField(unique = True, max_length = 100)
pages = models.ManyToManyField(Page, through = 'PageChild')
class PageChild(models.Model):
section = models.ForeignKey(Section)
page = models.ForeignKey(Page, limit_choices_to = Q(is_template = False, is_background = False))
@receiver(m2m_changed, sender = Section.pages.through)
def m2m(sender, **kwargs):
print "m2m changed!"
m2m_changed.connect(m2m, sender = Section.pages.through, dispatch_uid = 'foo', weak = False)
我错过了一些明显的东西吗
4 回答
这是一个开放的bug:https://code.djangoproject.com/ticket/16073
本周我浪费了几个小时 .
你连接它两次,一次是
m2m_changed.connect
,另一次是接收器装饰器 .不确定它是否会有所帮助,但以下内容对我有用:
我不确定这是否有帮助,但你确定你应该使用Sender.pages.through来解决这个特殊情况吗?也许如果你试过
@reciever(m2m_changed, sender=PageChild)
注意:如果您有@reciever,则不需要m2_changed.connect(...),因为@reciever已经执行了连接操作 .