显示 ModelForms 的 django 表单验证错误
Posted
技术标签:
【中文标题】显示 ModelForms 的 django 表单验证错误【英文标题】:displaying django form validation errors for ModelForms 【发布时间】:2013-12-08 19:42:04 【问题描述】:我经常发现自己在视图中使用 ModelForm 来显示和翻译视图。我在模板中显示表单没有问题。我的问题是,当我使用这些时,表单通常不会使用 is_valid 方法进行验证。问题是我不知道是什么导致了验证错误。
这是视图中的一个基本示例:
def submitrawtext(request):
if request.method == "POST":
form = SubmittedTextFileForm()
if form.is_valid():
form.save()
return render(request, 'upload_comlete.html')
return render(request, 'failed.html')
else:
form = SubmiittedTextFileForm()
return render(request, 'inputtest.html', 'form': form)
我知道表单没有验证,因为我被重定向到 failed.html 模板,但我不知道为什么 .is_valid 为假。如何设置它以显示表单验证错误?
【问题讨论】:
【参考方案1】:几件事:
您没有将POST
发送到 POST。
要查看错误消息,您需要渲染回相同的模板。
试试这个:
def submitrawtext(request):
if request.method == "POST":
form = SubmittedTextFileForm(request.POST)
if form.is_valid():
form.save()
return render(request, 'upload_comlete.html')
else:
print form.errors #To see the form errors in the console.
else:
form = SubmittedTextFileForm()
# If form is not valid, this would re-render inputtest.html with the errors in the form.
return render(request, 'inputtest.html', 'form': form)
【讨论】:
【参考方案2】:我遇到了同样烦人的问题,并通过使用 HttpResponse 返回 form.errors.values()
来解决它。代码如下:
@csrf_exempt
def post(request):
form = UserForm(request.POST)
if form.is_valid():
return HttpResponse('All Good!')
else:
return HttpResponse(form.errors.values()) # Validation failed
在我的情况下它返回了:
<ul class="errorlist"><li>This field is required.</li></ul>
<ul class="errorlist"><li>This field is required.</li></ul>
<ul class="errorlist"><li>This field is required.</li></ul>
<ul class="errorlist"><li>This field is required.</li></ul>
它提供的信息不多,但足以给你一个想法。
【讨论】:
以上是关于显示 ModelForms 的 django 表单验证错误的主要内容,如果未能解决你的问题,请参考以下文章
django 中的 ModelForms 是不是仅用于发布?
在 ModelForms 中继承 formfield_callback 的 Django 问题
在 ModelForms 中继承 formfield_callback 的 Django 问题