我已经阅读了一些有关这方面的问题,但没有一个适用于我的案例。 我想在保存新条目时向用户发送邮件。
发表/ models.py
from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User
from django.db.models.signals import post_save
from django.core.mail import EmailMultiAlternatives
from django.template.loader import render_to_string
from django.dispatch import receiver
class Post(models.Model):
client = models.ForeignKey(User)
date = models.DateTimeField(blank=True, editable=False)
@receiver(post_save, sender=User)
def first_mail(sender, instance, **kwargs):
if kwargs['created']:
user_email = instance.User.email
subject, from_email, to = 'New Post', 'from@example.com', user_email
text_content = render_to_string('post/mail_post.txt')
html_content = render_to_string('post/mail_post.html')
# create the email, and attach the HTML version as well.
msg = EmailMultiAlternatives(subject, text_content, from_email, [to])
msg.attach_alternative(html_content, "text/html")
msg.send()
此信号不会发送任何电子邮件。我正在使用mail_panel来跟踪电子邮件。
答案 0 :(得分:1)
参考django文档:
sender - 模型类。
https://docs.djangoproject.com/en/1.11/ref/signals/#post-save
因此,如果您要保存Post类的对象,那么信号发送者是Post而不是User。
然后在信号中,您引用instance
(类Post
的对象),并访问其字段client
(FK链接,类User
的实例)和得到它的字段email
。
正确的形式:
user_email = instance.client.email
在课堂上假设用户出现在电子邮件领域。