显示 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 是不是仅用于发布?

基于 Django 类的通用视图和 ModelForms

在 ModelForms 中继承 formfield_callback 的 Django 问题

在 ModelForms 中继承 formfield_callback 的 Django 问题

Django 模型和 ModelForms 中的空白、Null 和必需

Django ModelForms - “实例”没有按预期工作