当验证失败时,我无法让Django保留输入的表单值。我创建了一个测试页面并使用了Django指南中的代码,它仍然无法正常工作。
来自Django guide:
我们调用表单的is_valid()方法;如果它不是True,我们将返回带有表单的模板。这次表单不再为空(未绑定),因此HTML表单将填充先前提交的数据,可根据需要对其进行编辑和更正。
这是我的代码:
#views.py
def test(request):
if request.method == 'POST':
form = NewAwardForm(request.POST)
if form.is_valid():
return redirect('/test/')
else:
form = NewAwardForm()
print(form)
return render(request, 'test.html', {'form': form})
test.html
<form action="/test/" method="post">
{% csrf_token %}
{{ form }}
<input type="submit" value="Submit">
</form>
forms.py
class NewAwardForm(forms.Form):
recipient_email = forms.EmailField(label='Recipient Email', max_length=100)
有人能发现我的错误吗?
答案 0 :(得分:1)
Django使用type="email"
呈现电子邮件字段。 HTML验证将阻止浏览器向服务器提交无效的电子邮件。
您可以通过向表单添加一个干净的方法来测试视图,该方法拒绝任何以&#34; example.com&#34;结尾的电子邮件。
class NewAwardForm(forms.Form):
recipient_email = forms.EmailField(label='Recipient Email', max_length=100)
def clean_recipient_email(self):
if self.cleaned_data['recipient_email'].endswith('example.com'):
raise forms.ValidationError("No example.org emails allowed")
现在,如果您输入hello@example.com
并提交表单,HTML验证将允许提交请求,clean_recipient_email
方法将引发验证错误,您将看到您的视图和模板按预期显示无效表单。