我试图将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
的静态版本,将实例作为参数传递,并将其用作接收器,但有更好的方法吗?
答案 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)