2016-06-24 8 views
0

Ich versuche, Djangos post_save-Signal mit einer gebundenen Instanzmethode zu verbinden, aber es wird nicht aufgerufen. Der Code ist:Verbinde ein Signal mit einer gebundenen Methode

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) 

Wenn ich dekorieren signal_receiver mit @classmethod es ok funktioniert. Es gibt diesen Kommentar in der Quelle der connect Methode, die mich dazu gebracht zu glauben, dass es möglich sein sollte, gebundene Methoden zu verbinden, wie gut:

Empfänger - eine Funktion oder eine Instanz Methode, die Signale zu empfangen ist.

Ich glaube, ich könnte die statische Version von signal_receiver Curry, es Instanz als Parameter übergeben, und verwenden Sie diese als Empfänger, aber gibt es einen besseren Weg?

Antwort

1

Sie müssen in der Verbindungsmethode auch "weak = False" übergeben. Ihr Code sollte also lauten:

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) 
Verwandte Themen