2

私はシグナルを使用してメールを送信しており、正常に機能しています(現在、テストして静的な電子メールアドレスを提供しています)。しかし、メール関数でモデルフィールドの動的な値を使用したいと思います。

たとえば、管理者がそのモデルの管理ダッシュボードから何かを変更した場合、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.', 'from@example.com',
    ['ndhiman08@gmail.com'], 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}

モデルフィールドの値をシグナルで使用できるように、何らかの方法を提案してください。

ありがとう。

4

1 に答える 1

3

instance保存されたモデル オブジェクトであるシグナル ハンドラに提供される引数があります。したがって、次のように使用できます。

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

post_save のドキュメントでこれについて説明しています。

于 2013-01-10T06:08:50.737 に答える