2013-01-10 85 views
2

我正在使用信號發送郵件,並且工作正常(現在我正在測試它並提供靜態電子郵件地址)。但我想在我的郵件功能中使用模型字段的動態值。django中的信號問題

例如如果管理員在該模型中更改了管理儀表板中的任何內容,則會使用post_save調用信號,並且會調用郵件功能。但是我需要這個模型的用戶id,這樣我才能從auth_user表中獲取他的名字email_address。

我在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參數提供給保存Model對象的信號處理程序。 所以,你可以使用它作爲:

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