我已经使用@receiver
修饰符在回调中注册了我的信号
@receiver(post_save, sender=User, dispatch_uid='ARandomUniqueString')
def do_callback(sender, **kwargs):
我把from app.signals import *
代码放在__init__.py
中,我可以看到它被导入了两次,我认为没有一个好的方法来修复它,可能是由于settings.py
中的installed apps
造成的。我不明白为什么尽管使用了dispatch_uid
和modelInstance.save
只调用了一次,但它仍然运行do_callback
两次。有什么建议吗?在
我有同样的问题后保存和后删除信号。似乎session对象和LogEntry对象也被保存了,尽管设置了dispatch\uid,但仍创建了多个信号。在
对我有用的是:
您不应该在
__init__.py
文件中放入任何内容。在如果您从
__init__.py
中删除此项,并将其添加到models.py
的底部,它应该可以解决您的问题。在你还应该避免“盲目”进口
from foo import *
所以我将导入移到
views.py
(或models.py
),虽然它只被导入一次,但却被调用了两次。在问题是在创建和保存对象时,
post_save
信号被调用。我不知道为什么,所以我添加了一个工作区,现在工作编辑:
post_save
被调用了两次,因为我使用了.create(...)
,它相当于__init__(...)
和{结论
dispatch_uid
确实有效,而且单次导入仍然是一种很好的做法。相关问题 更多 >
编程相关推荐