Django pre_save触发两次
我在使用Django的信号功能来处理数据去规范化。以下是我的代码:
# 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()
我不太明白为什么,当我保存Vote
实例时,update_post_votes_on_save()
这个函数会被调用两次。我以为是我代码里的bug,但通过管理界面保存时也出现了同样的情况。
文档提到了一些关于使用dispatch_uid
来防止重复调用的内容,但我不太明白这是否适用。我尝试过这样做,但没有成功:
@receiver(pre_save, sender=Vote, dispatch_uid="my_unique_identifier")
有没有人知道为什么这个函数会被调用两次,以及如何避免这种情况?
1 个回答
9
抱歉让你感到困惑,不过其实 dispatch_uid
解决了这个问题。记得在提问之前,可能需要重启开发服务器才能看到效果哦 :)