Django-Signal über Decorator nach Modellmethode?

Ich versuche so etwas zu machendiese vorgeschlagenen Signaldekoratoren. Zusätzlich zu einem Decorator, der die decorated-Methode mit einem Signal verbindet (mit dem Absender des Signals als Argument für den Decorator), möchte ich den Decorator für Klassenmethoden verwenden.

Ich würde den Dekorateur gerne so benutzen:

class ModelA(Model):

    @connect.post_save(ModelB)
    @classmethod
    def observe_model_b_saved(cls, sender, instance, created, **kwargs):
        # do some stuff
        pass

Der Dekorateur ist:

from django.db.models import signals
def post_save(sender):
    def decorator(view):
        signals.post_save.connect(sender=sender, receiver=view)
        return view
    return decorator

Der Fehler, den ich dabei erhalte, ist:

File "/Library/Python/2.6/site-packages//lib/python2.6/site-packages/django/dispatch/dispatcher.py", line 78, in connect
AssertionError: Signal receivers must be callable.

Ich denke das Problem ist das@classmethod gibt ein Klassenmethodenobjekt zurück, das nicht aufrufbar ist. Ich verstehe nicht wirklich wieclassmethod funktioniert unter der haube, aber ich vermute abdiese Referenzseite dass das Klassenmethodenobjekt nicht in ein aufrufbares Objekt übersetzt wird, bis von der Klasse darauf zugegriffen wird, z.ModelA.observe_model_b_saved. Kann ich meine Methode auf irgendeine Weise (1) als Klassen- oder Instanzmethode in einem Modell definieren und (2) mit einem Dekorator direkt in der Methodendefinition mit einem Signal verbinden? Vielen Dank!

Antworten auf die Frage(3)

Ihre Antwort auf die Frage