2009-07-19 6 views
1

models.py 파일에 신호 처리기 함수를 정의했습니다. 이 파일의 맨 아래에 나는 http://docs.djangoproject.com/en/dev/topics/signals/의 문서에서 권장하는대로 signals.post_save.connect(myhandler, sender=myclass)을 사용합니다.django1.1 테스트 서버에 두 번 이상 등록 된 신호

그러나 테스트 서버를 실행하면 간단한 print-statement 디버깅을 통해 models.py 파일이 두 번 가져오고 (내가 알 수있는 한) 신호 처리기가 두 번 등록됩니다. 즉, 모든 동작이 두 번 처리되는 것은 의도 한 동작이 아니라는 것을 의미합니다.

첫 번째 가져 오기는 모델 확인 단계에서 발생하는 것으로 보입니다. 두 번째 가져 오기는 서버에서 처리하는 첫 번째 요청 중에 모델 자체가 필요할 때 올바르게 수행됩니다.

신호 처리기를 다른 위치에 등록해야합니까? 이것은 1.1 테스트 서버의 버그입니까? 나는 다른 것을 놓치고 있니?

답변

4

connect 메소드 서명은 고유 dispatch_uid 파라미터 수신자의 특정 인스턴스를 식별하는데 사용되는 식별자이다

def connect(self, receiver, sender=None, weak=True, dispatch_uid=None) 

이다. 이것은 일반적으로 문자열이 될 수 있지만 해시 가능할 수 있습니다. 리시버에 dispatch_uid 속성이있는 경우 다른 리시버가 이미 dispatch_uid 인 경우 리시버는 추가되지 않습니다.

connect 호출에 dispatch_uid을 지정하여 문제가 없는지 확인할 수 있습니다.

+0

환상적! 이게 내가 찾고 있던 바로 그거야, 내 문제를 해결해. 여전히 내가 만든 모든 고유 한 신호 처리기에 대해이 작업을 수행해야하는 것은 다소 서투른 것처럼 느껴지지만 작동하는 것은 ...이 동작이 1.1에서 변경된 이유가 궁금합니다. –

+0

신호가 제대로 지원되지 않기 때문에이 동작이 변경됩니다. 당신이 필요로하는 거의 모든 것은'save'를 무시함으로써 할 수 있습니다. –

+1

'저장'을 무시할시기와 신호를 사용할시기에 대한 설명은 http://stackoverflow.com/questions/170337/django-signals-vs-overriding-save-method를 참조하십시오. –

관련 문제