我有以下表格:
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
答案 0 :(得分:0)
您不应该使用ModelForm
执行此任务。继承常规Form
:
class RemoveEmail(forms.Form):
email = forms.EmailField(label=_("E-Mail"), max_length=150)
...