Django-fr

Forum

#1 21-06-2011 18:20:59

gerard13
Membre
Inscription : 25-05-2011
Messages : 7

signal pour un objet

bonjour,
j'ai un probleme avec les signaux, en suivant la doc de la 1.3:
https://docs.djangoproject.com/en/1.3/topics/signals/

J'ai ecrit:

@receiver(post_save, sender=MyModel)
def my_callback(sender, **kwargs):
    if 'created' in kwargs:
        if kwargs['created']:
            print "sender", sender
            print "Request finished!"
            if kwargs['instance']:
                mymodel = kwargs['instance']
                print "mymodel ", mymodel


post_save.connect(my_callback, dispatch_uid="my_unique_identifier")

pour etre sur que ma callback est appelee a chaque fois que je cree un objet MyModel (au travers de l'interface d'admin).
Mais les traces du serveur me disent que ce n'est pas que l'instance d'un objet MyModel que je recupere:

sender <class 'myproj.models.MyModel'>
Request finished!
mymodel  corpus: jpg methode: Methode object status: W cpu_time: None mem_used: None created_on: 2011-06-21 19:14:05.246381

sender <class 'myproj.models.MyModel'>
Request finished!
mymodel  corpus: jpg methode: Methode object status: W cpu_time: None mem_used: None created_on: 2011-06-21 19:14:05.246381

sender <class 'django.contrib.admin.models.LogEntry'>
Request finished!
mymodel  LogEntry object

La callback est donc appelee 3 fois, malgre le decorateur pour limiter a l'objet MyModel, et le test sur 'created'.

Comment interpreter ce resultat?

Merci d'avance pour toute aide,

gerard

Hors ligne

#2 22-06-2011 08:13:10

gerard13
Membre
Inscription : 25-05-2011
Messages : 7

Re : signal pour un objet

pour ceux que ca interesse, en modifiant le code (apres recherche sur le net), ca marche. En gros, j'ai supprime le decorateur, sa presence faisait que le code etait execute 2 fois avec les memes valeurs (peut etre que la presence du decorateur court-circuite le dispatch_uid?)

def my_callback(sender, instance, created, raw, **kwargs):
        if created and not raw:
            print "Request finished!"

post_save.connect(my_callback, sender=MyModel, dispatch_uid="toto")

Hors ligne

Pied de page des forums