Django Signal via Decorator no Model Method?
Estou tentando fazer algo comoesses decoradores de sinal propostos. Além de ter um decorador que conecta o método decorado a um sinal (com o remetente do sinal como argumento para o decorador), eu gostaria de usar o decorador nos métodos de classe.
Eu gostaria de usar o decorador da seguinte forma:
class ModelA(Model):
@connect.post_save(ModelB)
@classmethod
def observe_model_b_saved(cls, sender, instance, created, **kwargs):
# do some stuff
pass
O decorador é:
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
O erro que recebo quando faço isso é:
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.
Eu acho que o problema é que@classmethod
retorna um objeto de método de classe que não pode ser chamado. Eu realmente não entendo comoclassmethod
funciona sob o capô, mas suponho queesta página de referência que o objeto do método da classe não é convertido em uma chamada até que seja acessado a partir da classe, por exemplo,ModelA.observe_model_b_saved
. Existe alguma maneira de eu (1) definir meu método como um método de classe ou instância em um modelo e (2) conectá-lo a um sinal usando um decorador diretamente na definição do método? Obrigado!