Pra*_*kar 8 python mysql django signals
我使用@receiver装饰器使用回调注册了我的信号
@receiver(post_save, sender=User, dispatch_uid='ARandomUniqueString')
def do_callback(sender, **kwargs):
Run Code Online (Sandbox Code Playgroud)
我已经把from app.signals import *代码放进去__init__.py,我可以看到它被导入了两次,我认为没有一种好方法可以解决它,可能是由于installed appsin 而发生的settings.py.我无法理解为什么尽管使用dispatch_uid和modelInstance.save仅被调用一次,它仍然运行do_callback两次.有什么建议?
Pra*_*kar 10
好的,所以我将导入移动到views.py(或者models.py当它只导入一次时,它被调用了两次.
问题是post_save当对象被创建和保存时,信号被调用.我不知道为什么这样我添加了现在有效的解决方法
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
Run Code Online (Sandbox Code Playgroud)
编辑:
post_save因为我使用了.create(...)相当于__init__(...)和的两次被调用.save().
结论
dispatch_uid 确实有效,做单一进口仍然是一种很好的做法.
| 归档时间: |
|
| 查看次数: |
4128 次 |
| 最近记录: |