2009-10-29 7 views
3

개체를 삭제 한 후 신호를 사용하여 작업을 수행하고 있습니다. 그러나 경우에 따라 다른 동작 (기본값이 아닌)을 수행하려고합니다.pre_delete() 또는 post_delete() 신호 인수를 전달 하시겠습니까?

내 신호 포수에 인수를 전달할 방법이 있습니까? 아니면 신호를 포기하고 대신 모델에서 수행 할 작업을 하드 코딩해야합니까? 가장 좋은 방법에

>>> MyModelInstance.delete() 
    # default pre_delete() signal is run, in this case, an email is sent 
>>> MyModelInstance.delete(send_email=False) 
    # same signal is run, however, no email gets sent 

모든 아이디어 : 내가하고 싶은 무엇

이 같은 것입니다?

답변

4

모델에서 작업을 하드 코딩해야한다고 생각하지 않습니다. 신호를 계속 사용할 수는 있습니다. 하지만 적어도 send_email 매개 변수를 받아들이 기 위해서는 delete()를 재정의해야합니다. post_delete()에 추가 매개 변수를 전달할 수 있다고 생각하지 않기 때문에 사용자 정의 신호를 트리거 할 수 있습니다. 이 같은

뭔가 : (메모리에서 작성, 안된!)

import django.dispatch 
your_signal = django.dispatch.Signal(providing_args=["send_email",]) 

def your_callback(sender, **kwargs): 
    print send_email 

your_signal.connect(your_callback) 

class YourModel(models.Model): 
    ... 
    def delete(self, send_email=True): 
     super(YourModel, self).delete() 
     your_signal.send(sender=self, send_email=send_email) 
    ... 

면책 조항 : 그 가장 좋은 방법 있는지 알고하지 않습니다.

+0

나는이 접근법을 사용할 수있었습니다. 최선인지 아닌지는 모르지만, 그것은 저에게 맞습니다! 감사. – thornomad

관련 문제