【问题标题】:displaying django form validation errors for ModelForms显示 ModelForms 的 django 表单验证错误
【发布时间】: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 为假。如何设置它以显示表单验证错误?

【问题讨论】:

    标签: python django forms validation


    【解决方案1】:

    几件事:

    1. 您没有将POST 发送到 POST。

    2. 要查看错误消息,您需要渲染回相同的模板。

    试试这个:

    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>
      

      它提供的信息不多,但足以给你一个想法。

      【讨论】:

        猜你喜欢
        • 2019-01-30
        • 1970-01-01
        • 2012-04-05
        • 2021-01-01
        • 1970-01-01
        • 2020-11-22
        • 2017-08-02
        • 2019-07-01
        • 1970-01-01
        相关资源
        最近更新 更多