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)
...