我在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的子类)。
答案 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