2013-01-10 2 views
2

나는 신호를 사용하여 메일을 보내고 있으며 정상적으로 작동하고 있습니다 (지금은 테스트 중이며 정적 이메일 주소를 제공하고 있습니다). 하지만 내 메일 기능에서 모델 필드의 동적 값을 사용하고 싶습니다.django의 신호 관련 문제

admin이 admin 대시 보드에서 해당 모델의 내용을 변경하면 post_save를 사용하여 신호가 호출되고 메일 기능이 그렇게 호출됩니다. 하지만 auth_user 테이블에서 email_address라는 이름을 가져올 수 있도록이 모델의 해당 사용자 ID가 필요합니다.

post_save에서 모델 이름을 보내고 있지만 가능하면 신호 필드에 사용하는 방법을 모르겠습니다.

지금이 코드를 사용하고 있습니다.

내 모델

class ABC(models.Model): 
    ..... 
    ....... 

post_save.connect(handlers.model_saved, sender=ABC) 

라고 신호. 내가 신호를 내 모델 필드의 알엇을 사용할 수 있도록

from django.core.mail import send_mail 


def model_saved(sender, **kwargs): 
    send_mail('Subject here', 'Here is the message.', '[email protected]', 
    ['[email protected]'], fail_silently=False) 
    print "SAVED",sender,kwargs 

터미널 응답

<class 'XYZ.models.ABC'> {'raw': False, 'instance': <ABC: #1 admin admin 2013-01-04 04:20:50+00:00>, 'signal': <django.dispatch.dispatcher.Signal object at 0xb612584c>, 'using': 'default', 'created': False} 

나에게 몇 가지 방법을 제안 해주십시오.

감사합니다.

답변

3

저장된 모델 객체 인 신호 처리기에 제공된 인수는 instance입니다.

def model_saved(sender, **kwargs): 
    send_mail('Subject here', 'Here is the message.', '[email protected]', 
    ['[email protected]'], fail_silently=False) 
    abc_obj = kwargs['instance'] 
    #can use fields as 
    #abc_obj.somefield 
    print "SAVED",sender,kwargs 

post_save documentation이 설명 : 그래서 당신은로 사용할 수 있습니다.

+0

답장을 보내 주셔서 감사합니다. – Inforian

+0

예 작품! 고마워요. – Inforian

+0

handler.py에서 뷰를 임포트하려고 할 때 내부 서버 오류가 발생하는 경우 handler.py에서 뷰 함수를 호출 할 수 있습니까? – Inforian