J'utilise des signaux django pour la dénormalisation des données. Voici mon code:Django pre_save déclenché deux fois
# vote was saved
@receiver(pre_save, sender=Vote)
def update_post_votes_on_save(sender, instance, **kwargs):
""" Update post rating """
# is vote is being updated, then we must remove previous value first
if instance.id:
old_vote = Vote.objects.get(pk=instance.id)
instance.post.rating -= old_vote.value
# now adding the new vote
instance.post.rating += instance.value
instance.post.save()
Je ne comprends pas pourquoi, mais quand mon Vote
instance est en cours d'enregistrement, update_post_votes_on_save()
est appelé deux fois. Je pensais qu'il y avait un bug dans mon code, mais l'enregistrement via l'interface admin donne le même résultat.
Les docs disent quelque chose au sujet de using dispatch_uid
to prevent duplicate calls, mais je ne peux pas comprendre si c'est le cas. Comment utiliser dispatch_uid
? J'ai essayé ceci, mais sans chance:
@receiver(pre_save, sender=Vote, dispatch_uid="my_unique_identifier")
Des idées pourquoi la fonction est appelée deux fois et comment l'éviter?
Cherchez dans votre code l'emplacement où vous enregistrez le signal - assurez-vous qu'il n'est pas enregistré deux fois – Chris
@chris : Le dispatch_uid devrait l'empêcher d'être enregistré deux fois. @ Silver-light: Comment avez-vous vérifié que votre gestionnaire est appelé deux fois? – shadfc
Check this out http://groups.google.com/group/django-users/browse_thread/thread/0f8db267a1fb036f Peut-être que vous avez aussi des doublons. – fceruti