django : send mail to users from admin panel
我想知道如何配置 django 管理员以查看表单,因此 auth_user 应该发送电子邮件给订阅用户。
我做了什么:
models.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | from django.db import models from datetime import datetime class Mail(models.Model): email=models.EmailField(max_length=255,unique=True,help_text="Το email του χρ?στη",verbose_name="Email") timestamp=models.DateTimeField(default=datetime.now,help_text="Η ημερομην?α που ο χρ?στη? γρ?φτηκε στην newsletter list",verbose_name="Ημερομην?α εγγραφ??") delete_link=models.SlugField(unique=True,max_length=255,null=True,blank=True) def __unicode__(self): return self.email class Meta: verbose_name ="Email User" verbose_name_plural ="Email Users" |
forms.py
1 2 3 4 5 6 | from django import forms class MailForm(forms.Form): subject = forms.CharField(max_length=255) message = forms.CharField(widget=forms.Textarea) attachment = forms.FileField() |
我正在尝试在管理页面中添加一个指向时事通讯应用程序的链接。示例:
现在,我必须为表单编写验证规则(主题和消息不能为空)。对于验证,我正在尝试执行以下操作:
1 2 3 4 5 6 7 8 9 | def clean_subject(self): if self.cleaned_data["subject"]=="" or self.cleaned_data["subject"]==None: raise forms.ValidationError("My text goes here") return self.cleaned_data["subject"] def clean_message(self): if self.cleaned_data["message"]=="" or self.cleaned_data["message"]==None: raise forms.ValidationError("My text goes here") return self.cleaned_data["message"] |
当表单无效时,django 会显示一条类似标准方式的消息。示例:
最后,我必须编写 1 个视图来显示表单(我正在尝试使用 django admin 的标准内容,以及 1 个视图,其中显示"成功发送 130 封邮件"。
任何建议我如何配置 django admin 来执行我所描述的操作都会很有用!
我认为您应该创建一个 Mail 模型。首先,您必须创建一个邮件并保存它。然后,您可以使用邮件模型的保存方法将其发送给您的所有电子邮件用户,或者添加自定义管理操作来执行此操作。在我看来,保存方法是最好的。
所以你应该在 models.py 中有这个:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | from django.db import models from datetime import datetime from django.core.mail import send_mail class Mail(models.Model): ... class Meta: verbose_name ="Email User" verbose_name_plural ="Email Users" class MailText(models.Model): subject = models.Charfield() message = models.Charfield() attachment = models.Filefield() users = models.ManyToManyField(Mail) send_it = models.BooleanField(default=False) #check it if you want to send your email def save(self): if self.send_it: #First you create your list of users user_list = [] for u in self.users: user_list.append(u.email) #Then you can send the message. send_mail(str(self.subject), str(self.message), '[email protected]', user_list, fail_silently=False) class Meta: verbose_name ="Emails to send" verbose_name_plural ="Emails to send" |