Django表单验证覆盖电子邮件

Django表单验证覆盖电子邮件,django,forms,error-handling,Django,Forms,Error Handling,我有以下表格: class RemoveEmail(forms.ModelForm): email = forms.CharField(label=_("E-Mail"), max_length=150, error_messages={ 'invalid': _("Required. This value may contain only letters, num

我有以下表格:

class RemoveEmail(forms.ModelForm):
    email = forms.CharField(label=_("E-Mail"), max_length=150,
                             error_messages={
                                 'invalid': _("Required. This value may contain only letters, numbers and "
                                              "@_-.")})

    def __init__(self, *args, **kwargs):
        super(forms.ModelForm, self).__init__(*args, **kwargs)
        for f in self.fields:
            self.fields[f].widget.attrs['class'] = 'form-control'

    def clean_email(self):
        return self.cleaned_data['email']

    def delete(self, commit=False):
        try:
            email = self.cleaned_data.get('email')
            newsletter = Newsletter.objects.get(email=email)
            newsletter.optout = True
            if commit:
                newsletter.save()
            return True
        except Newsletter.DoesNotExist:
            return False
这将从通讯列表中删除用户。该用户通过电子邮件进行标识

不幸的是,当用户提交表单时,它不会进行验证,而是抛出错误:

“包含此电子邮件的新闻稿已存在。”

是否有任何方法可以覆盖此项?我想创建一个新对象,而不是改变现有对象

我的看法是:

def optout(request):
    context = {}
    if request.POST:
        form = RemoveEmail(request.POST)
        if form.is_valid():
            status = form.delete(True)
            return render(request, 'index/sad.html')
    else:
        form = RemoveEmail()

    context.update({'form': form})
    return render(request, 'index/optout.html', context)
我的模型:

class Newsletter(models.Model):
    fullname = models.CharField(max_length=150, blank=True, null=True)
    email = models.CharField(max_length=150, unique=True)
    title = models.CharField(max_length=10, blank=True, null=True)
    optout = models.BooleanField(default=False)

    signup_date = models.DateTimeField(auto_now_add=True)
    useragent = models.CharField(max_length=255)
    ipaddress = models.CharField(max_length=32)
    country = models.CharField(max_length=100, blank=True, null=True)
    referrer = models.CharField(max_length=255, blank=True, null=True)

    def __unicode__(self):
        return self.email

此任务不应使用
ModelForm
。从常规
表单继承:

class RemoveEmail(forms.Form):
    email = forms.EmailField(label=_("E-Mail"), max_length=150)
    ...