I recently started to use signals in my Django project (v. 1.3) and they all work fine except that I just can't figure out why the m2m_changed signal never gets triggered on my model. The Section instance is edited by adding/deleting PageChild inline instances on an django admin form.
I tried to register the callback function either way as described in the documentation, but don't get any result.
Excerpt from my 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)
Am I missing something obvious?
Not sure if it will help, but the following is working for me:
You are connecting it twice, once with
m2m_changed.connect
and the other time with receiver decorator.I'm not sure if this will help, but are you sure that you should use Sender.pages.through for this special case? perhaps if you tried
@reciever(m2m_changed, sender=PageChild)
Note: if you have @reciever, you do not need m2_changed.connect(...) as @reciever already performs the connect operation.
This is an open bug: https://code.djangoproject.com/ticket/16073
I wasted hours on it this week.