Ben these proposed signal decorators gibi bir şey yapmaya çalışıyorum. Dekore edilmiş yöntemi bir sinyale bağlayan bir dekoratörün yanı sıra (sinyalin dekoratörün argümanı olarak gönderici ile birlikte), dekoratörü sınıf yöntemleri üzerinde kullanmak isterim.Django Model Üzerinden Dekoratörlü Sinyal mi?
ben şöyle dekoratör kullanmak istiyorum:
class ModelA(Model):
@connect.post_save(ModelB)
@classmethod
def observe_model_b_saved(cls, sender, instance, created, **kwargs):
# do some stuff
pass
dekoratör: Ben bunu yaptığımda
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
alıyorum hatadır:
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.
Sorun şu ki, @classmethod
, callable olmayan bir sınıf yöntemi nesnesi döndürüyor. Gerçekten başlık altında nasıl classmethod
eser anlamıyorum, ama örneğin ModelA.observe_model_b_saved
, sınıf erişilir kadar sınıf yöntemi nesne çağrılabilir çevrilmiş olmadığını this reference page dan tahmin. Her iki yöntemde de (1) yöntemimi bir model üzerinde sınıf veya örnek yöntemi olarak tanımlayabilirim ve (2) doğrudan yöntem tanımında bir dekoratör kullanarak bir sinyale bağlayabilir miyim? Teşekkürler!
@classmethod ve @connect? Sı sırasını değiştirirseniz işe yarıyor mu? – Wogan
Hayır şimdi alıyorum: "observe_model_b_saved() tam 4 sigara kelime argümanlar (0 Verilen) alır". Bu ne demek? –