2011-05-07 8 views
5

하나의 모델에 여러 신호를 등록하려고합니다. 추가 신호를 등록하면 이전 신호가 제거되는 것 같습니다.장고에 여러 신호 등록

from django.dispatch import receiver 
from django.db.models.signals import post_save,post_delete 
from my.app.models import Resource 


@receiver(post_save,sender=Resource) 
def ResourceSaved(sender,**kwargs): 
    print "Saved" 

@receiver(post_delete,sender=Resource) 
def ResourceSaved(sender,**kwargs): 
    print "Deleted" 

나는 워드 프로세서 주위를 살펴 보았다,하지만 난 클래스 메이트에서 사용자 정의 신호를 생성하는 방법에 대한 자세한 내용을 찾아 유지. 수업 형식으로 등록하는 방법이 아닙니다.

나는 이런 식으로 뭔가를 할 수 상상 : 사전에 도움을

@reciver(sender=Resource) 
class SignalAnsweringMachine(object): 
    def post_delete(self,**kwargs): 
     print "delete" 
    def post_save(self,**kwargs): 
     print "save" 

감사합니다.

답변

11

ResourceSaved을 다시 정의한 것입니다 (실수로). 다음과 같이 대신 사용해보십시오.

@receiver(post_save,sender=Resource) 
def ResourceSaved(sender,**kwargs): 
    print "Saved" 

@receiver(post_delete,sender=Resource) 
def ResourceDeleted(sender,**kwargs): 
    print "Deleted" 
5

이 단축형을 사용하여 두 개 이상의 핸들러를 등록합니다.

제 경우에는 캐시 된 카테고리 목록을 지 웁니다.

from django.dispatch import receiver 
from django.db.models.signals import post_save, post_delete 
from ..models import Category 

all_categories = [] 

# Post save handler for Category model to clear "all_categores" variable 
@receiver(post_save, sender=Category) 
@receiver(post_delete, sender=Category) 
def post_save_category(sender, **kwargs): 
    # clean cached categories 
    global all_categories 
    all_categories = [] 
+1

와우는 어떻게 작동합니까? – eugene