在django1.1 testserver中多次注册的信号

时间:2009-07-19 05:59:53

标签: python django django-models django-signals

我在models.py文件中定义了一个信号处理函数。在该文件的底部,我使用了http://docs.djangoproject.com/en/dev/topics/signals/文档中建议的signals.post_save.connect(myhandler, sender=myclass)

但是,当我运行测试服务器时,简单的print-statement调试显示models.py文件被导入两次(据我所知),这导致我的信号处理程序被注册两次。这意味着每个动作都被处理两次,这显然不是预期的行为。

第一次导入似乎发生在模型检查阶段,第二次导入发生在服务器处理的第一个请求期间需要模型本身时。

我应该在别处注册我的信号处理程序吗?这是1.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,看看是否可以解决问题。

相关问题