我在我项目的__init__.py
中写了一个Django信号。看起来像这样:
from django.db.models.signals import post_save
from paypal.standard.ipn.models import PayPalIPN
def confirm_paypal_payment(sender, **kwargs):
obj = kwargs['instance']
...
...
post_save.connect(confirm_paypal_payment, sender=PayPalIPN, dispatch_uid="confirm_paypal_payment")
此信号等待此模型中的保存https://github.com/spookylukey/django-paypal/blob/master/paypal/standard/ipn/models.py
我卡住了,无法理解为什么我会继续收到重复的信号,我已经阅读了文档,并且说我应该使用dispatch_uid
来阻止这种情况。但即使使用dispatch_uid
,我仍然会收到重复的信号。
有关如何找到根本原因的任何想法?我使用的是Django 1.6.2。
答案 0 :(得分:1)
将其移出__init__.py
并将其保存为signals.py
(您的应用目录中的新文件,与views.py
相同的位置)或models.py
},建议在documentation:
您可以将信号处理和注册码放在任何您喜欢的地方。 但是,您需要确保它所在的模块得到 早期导入,以便之前注册信号处理 需要发送任何信号。这使您的应用
models.py
变得更好 放置信号处理程序的地方。
__init__.py
是放置这样的代码的一个非常糟糕的地方,因为很有可能它会被执行多次。