2011-02-02 1 views
2

Foo 유형의 객체를 추가하거나 제거 할 때 동일한 계산을 수행해야합니다. Foo 모델의 오브젝트 추가/삭제를 어떻게 감지합니까? 예를 들어 :Django 모델의 객체를 추가/삭제할 때 어떻게 감지 할 수 있습니까?

from django.db import models 

class Foo(models.Model): 
    ... 
    def save(self): 
     #do some processing 

    def delete(self): 
     #do some processing 

나는이 두 가지 방법의 코드 중복을 피하기 수 있습니까?

하기 전이나 모델이 저장 또는 삭제 (및 다른 시간에, 경우가있을 필요) 후에 특정 함수를 호출하는 장고의 신호를 사용한다 당신이

from django.db import models 
from django.db.models.signals import post_save, post_delete 

class Foo(models.Model): 
    ... 
    ... 

def foo_handler(sender, **kwargs):  
    #do some processing 

post_save.connect(foo_handler, sender=Foo) 
post_delete.connect(foo_handler, sender=Foo)  
+0

아니요. 왜? 중복이 없습니다. 이것은 완벽 해. 그리고 아주 간단합니다. 그리고 모두가 기대하는 것. 너 그것에 대해 맘에 안들니? –

답변

6

처럼 구현할 수있는 신호를 사용하여. 여기에 관련 문서를 체크 아웃 : 당신이 모델의 메소드를 오버라이드 (override)하는 경우를 A의 검색어에서 대량으로 개체를 삭제할 때 delete()가 호출되지 않습니다 (here 참조) http://docs.djangoproject.com/en/dev/topics/signals/

.

signal.connect을 사용하여 동일한 방법으로 여러 신호를 연결할 수 있습니다.

+0

좋은 점은 관리자의 대량 메소드가 단일 쿼리를 발행하고 신호를 전혀 생성하지 않는 경우가 종종 있습니다. –

+1

이 답변에 예제가 있다면 좋을 것입니다. 지금은 대답을 포함하지 않고 사용자가 대답을 얻기 위해 방문해야하는 일련의 링크 일뿐입니다. 참조 : http://meta.stackexchange.com/questions/8231/are-answers-that-just-contain-links-elsewhere-really-good-answers –

관련 문제