我在models.py文件中定义了一个信号处理函数。在该文件的底部,我使用了http://docs.djangoproject.com/en/dev/topics/signals/文档中建议的signals.post_save.connect(myhandler, sender=myclass)
。
但是,当我运行测试服务器时,简单的print-statement调试显示models.py文件被导入两次(据我所知),这导致我的信号处理程序被注册两次。这意味着每个动作都被处理两次,这显然不是预期的行为。
第一次导入似乎发生在模型检查阶段,第二次导入发生在服务器处理的第一个请求期间需要模型本身时。
我应该在别处注册我的信号处理程序吗?这是1.1测试服务器中的错误吗?我错过了别的什么吗?
答案 0 :(得分:4)
connect
方法的签名是
def connect(self, receiver, sender=None, weak=True, dispatch_uid=None)
其中dispatch_uid
参数是用于唯一标识接收者的特定实例的标识符。这通常是一个字符串,但它可能是任何可以清除的。如果接收者具有dispatch_uid
属性,则如果已存在dispatch_uid
的其他接收者,则不会添加接收者。
因此,您可以在dispatch_uid
来电中指定connect
,看看是否可以解决问题。