djangodjango-modelsmulti-table-inheritance

Django post_save signal on parent class with multi-table inheritance


In Django, if you have models that use multi-table inheritance, and you define a receiver for a post_save signal on the parent class, does that receiver function get called when an instance of the child class is saved?

Borrowing an example from another question:

class Animal(models.Model):
    category = models.CharField(max_length=20)

class Dog(Animal):
    color = models.CharField(max_length=10)

def echo_category(sender, **kwargs):
    print "category: '%s'" % kwargs['instance'].category

post_save.connect(echo_category, sender=Animal)

If I do:

>>> dog = Dog.objects.get(...)
>>> dog.category = "canine"
>>> dog.save()

Will the echo_category receiver function be called?


Solution

  • Check out: https://code.djangoproject.com/ticket/9318 It appears that most propagate the signal to the super in the subclass.