【发布时间】:2012-08-19 18:39:30
【问题描述】:
我遇到了post_save 被调用两次的问题,我花了很多时间来弄清楚前面提到的导入。我确认导入只发生一次,不存在多次注册的问题。此外,我在信号注册中使用了一个独特的dispatch_uid,根据文档应该已经解决了这个问题。它没。我更仔细地看了看,发现信号处理程序在 .create() 和 .save() 上都被调用了。为什么要创建?
我可以让它工作的唯一方法是依靠下面我的信号处理程序中的 hack
created = False
#Workaround to signal being emitted twice on create and save
if 'created' in kwargs:
if kwargs['created']:
created=True
#If signal is from object creation, return
if created:
return
这是对问题Django post save signal getting called twice despite uid的后续跟进
【问题讨论】:
-
大概你想要一个比“因为创建是实例化加保存”更好的答案?
-
@IgnacioVazquez-Abrams MyClass.objects.create(...) 与一般初始化 MyClass(...) 还是专门针对信号不同?我一直认为这两种创造方式是一样的,想知道为什么它不服从
Note that instantiating a model in no way touches your database; for that, you need to save().
标签: python django django-models signals