Django表单返回is_valid()= False且没有错误

时间:2015-02-16 22:03:14

标签: python django django-models django-forms

我在django应用程序中有简单的视图,我只想在其中一个表单有效时显示。我有类似的东西:

@login_required
@require_role('admin')
def new_package(request):
    invoicing_data_form = InvoicingDataForm(instance=request.user.account.company.invoicingdata)
    if invoicing_data_form.is_valid():
        # all here
        return HttpResponse('Form valid')
    else:
        logger.info("Form invalid")
        return HttpResponse(json.dumps(invoicing_data_form.errors)

我总是收到表单无效的日志信息,但是,

中什么都没有
invoicing_data_form.errors

这很奇怪,因为我在其他视图中使用用户输入数据验证此表单,并且它工作得很好。有什么想法吗?

编辑: 只是为了澄清。 我没有在此表单中请求用户提供任何数据。 我正在使用此表单来验证某个模型实例(此表单是ModelForm的子类)。

4 个答案:

答案 0 :(得分:17)

那是因为你没有"喂养"你的表格。

这样做:

invoicing_data_form = InvoicingDataForm(instance=invoice, data=request.POST or None)

答案 1 :(得分:8)

您有未绑定的表单。 https://docs.djangoproject.com/en/1.7/ref/forms/api/#bound-and-unbound-forms

  

Form实例绑定到一组数据或绑定。

     

如果它绑定到一组数据,它就能够验证该数据并将表单呈现为HTML,并在HTML中显示数据。

     

如果未绑定,则无法进行验证(因为没有要验证的数据!),但它仍然可以将空白表单呈现为HTML。

     

要将数据绑定到表单,将数据作为字典作为第一个参数传递给Form类构造函数:

invoicing_data_form = InvoicingDataForm(request.POST or None, instance=invoice)

答案 2 :(得分:1)

如果您已使用request.POST or None向表单发送request.POST,但它仍然无效且没有错误,请检查是否没有重定向。重定向会丢失您的POST数据,并且您的表单将无效且没有错误,因为它是未绑定的。

答案 3 :(得分:0)

我为AuthenticationForm买了它,需要AuthenticationForm(None, request.POST)参见Using AuthenticationForm in Django