2013-02-07 1 views
4

Dans Django, si vous avez des modèles qui utilisent l'héritage multi-table et que vous définissez un récepteur pour un signal post_save sur la classe parent, cette fonction récepteur est-elle appelée lorsqu'un instance de la classe enfant est enregistrée?Django signal post_save sur la classe parente avec héritage multi-table

Empruntant un exemple 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) 

Si je fais:

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

sera appelé la fonction du récepteur echo_category?

Répondre

0

Non, il ne sera pas appelé. Voir #9318 dans Django trac.

10
post_save.connect(my_handler, ParentClass) 
# connect all subclasses of base content item too 
for subclass in ParentClass.__subclasses__(): 
    post_save.connect(my_handler, subclass) 

Passez une agréable journée!

+1

Où pouvez-vous mettre cet extrait en toute sécurité afin que toutes les sous-classes soient déjà enregistrées? –

+0

@ScottStafford Dans la [méthode de l'application prête] (https://docs.djangoproject.com/fr/1.11/ref/applications/#django.apps.AppConfig.ready) –

Questions connexes