1

我想知道如何配置 django admin 以查看表单,因此 auth_user 应该向订阅用户发送电子邮件。

我做了什么:

模型.py

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"

表格.py

from django import forms

class MailForm(forms.Form):
        subject = forms.CharField(max_length=255)
        message = forms.CharField(widget=forms.Textarea)
        attachment = forms.FileField()

我正在尝试在管理页面中添加一个指向时事通讯应用程序的链接。示例:

在此处输入图像描述

现在不知何故,我必须为表单编写验证规则(主题和消息不能为空)。对于验证,我正在尝试执行以下操作:

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 会显示一条类似标准方式的消息。示例:

django 管理员错误验证

最后,我必须编写 1 个视图来显示表单(我正在尝试为 django admin 使用标准的东西,以及 1 个视图,其中显示“成功发送 130 封邮件”。

任何建议我如何配置 django admin 来执行我所描述的操作都会很有用!

4

1 回答 1

0

我认为您应该创建一个 Mail 模型。首先,您必须创建一个邮件并保存它。然后,您可以使用邮件模型的保存方法将其发送给您的所有电子邮件用户,或者添加自定义管理操作来执行此操作。在我看来,保存方法是最好的。

所以你应该在 models.py 中有这个:

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),
                          'from@example.com',
                          user_list, 
                          fail_silently=False)

        class Meta:
            verbose_name = "Emails to send"
            verbose_name_plural = "Emails to send"
于 2014-02-15T22:17:19.237 回答