Проблемы с сигналами в Django

Я использую сигналы для отправки почты и работает нормально (сейчас я тестирую его и предоставляю статический адрес электронной почты). Но я хочу использовать динамические значения полей модели в моей функции почты.

Например, если администратор изменяет что-либо из панели администратора в этой модели, сигнал вызывается с помощью post_save, а функция почты вызывается так. Но мне нужен идентификатор этого пользователя из этой модели, чтобы я мог получить его имя, email_address из таблицы auth_user.

Я отправляю название модели в 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}

Пожалуйста, предложите мне какой-нибудь способ, чтобы я мог использовать поля сигналов моей модели в сигналах.

Благодарю.

1 ответ

Решение

Есть instance аргумент, предоставленный обработчику сигнала, который является сохраненным объектом Model. Таким образом, вы можете использовать его как:

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 объясняет это.

Другие вопросы по тегам