我经常发现自己在视图中使用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是false。如何设置它以向我显示表单验证错误?
答案 0 :(得分:8)
一些事情:
您没有将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})
答案 1 :(得分: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>
它没有提供太多信息,但足以给你一个想法。