将信号连接到绑定方法

时间:2016-06-24 11:15:00

标签: django

我试图将django的post_save信号连接到绑定的实例方法,但它并没有被调用。代码是:

for adapter_class in signal_adapters:
    adapater_instance = adapter_class(definition_class)
    for signal in adapter_class.signals:
        signal.connect(adapater_instance.signal_reciever, sender=action_object_class)

如果我用signal_receiver装饰@classmethod,它就可以了。在connect方法的来源中有这条评论,这让我相信它也应该可以连接绑定的方法:

  

receiver - 接收信号的函数或实例方法。

我想我可以讨论signal_receiver的静态版本,将实例作为参数传递,并将其用作接收器,但有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

你还需要在connect方法中传递“weak = False”。所以你的代码应该是:

for adapter_class in signal_adapters:
    adapater_instance = adapter_class(definition_class)
    for signal in adapter_class.signals:
        signal.connect(adapater_instance.signal_reciever, sender=action_object_class, weak=False)