these proposed signal decorators과 같은 작업을하려고합니다. 장식 된 메서드를 신호 (데코레이터의 인수로 신호의 보낸 사람)와 연결하는 데코레이터가있는 것 외에도 클래스 메서드에 데코레이터를 사용하고 싶습니다.Django 신호를 통한 모델 메서드의 데코레이터?
내가 지금처럼 장식 사용하려면 :
class ModelA(Model):
@connect.post_save(ModelB)
@classmethod
def observe_model_b_saved(cls, sender, instance, created, **kwargs):
# do some stuff
pass
데코레이터는 : 나는이 작업을 수행 할 때
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
내가 오류는 다음과 같습니다
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.
문제는 @classmethod
이 호출 할 수없는 클래스 메서드 객체를 반환한다는 것입니다. classmethod
이 실제로 어떻게 작동하는지 이해할 수 없지만 클래스 메소드 객체가 클래스에서 액세스 될 때까지 (예 : ModelA.observe_model_b_saved
) 클래스 메소드 객체가 호출 가능 객체로 변환되지 않았다고 this reference page에서 추측합니다. (1) 내 메서드를 모델의 클래스 또는 인스턴스 메서드로 정의 할 수 있고 (2) 메서드 정의에 데코레이터를 직접 사용하여 신호에 연결할 수있는 방법이 있습니까? 감사!
@classmethod와 @connect의 순서를 바꾸면 작동합니까? – Wogan
아니요 이제 알게되었습니다 : "observe_model_b_saved()는 정확히 4 개의 비 키워드 인수 (주어진 0 개)"를가집니다. 무슨 뜻이에요? –