Django表单调用在模板中是有效的()
我正在使用Django 1.5。我有一个包含多个表单的模板:一个驾驶员有多辆车(内联表单)。我想显示一个提示,指示哪个部分包含错误 模板:Django表单调用在模板中是有效的(),django,forms,validation,Django,Forms,Validation,我正在使用Django 1.5。我有一个包含多个表单的模板:一个驾驶员有多辆车(内联表单)。我想显示一个提示,指示哪个部分包含错误 模板: {% if driver_form.is_bound and not driver_form.is_valid %} Please correct errors in the Driver Data. {% endif %} {% if car_form.is_bound and not car_form.is_valid %} Please
{% if driver_form.is_bound and not driver_form.is_valid %}
Please correct errors in the Driver Data.
{% endif %}
{% if car_form.is_bound and not car_form.is_valid %}
Please correct errors in the Car Data.
{% endif %}
问题是,如果第一个表单无效,第二条消息也会弹出,即使第二个表单有效。我还注意到,如果我将{{car\u form.is\u valid}}
连续放置三次,第一次它是空的,下一次(以及接下来)它是真的
原始观点:
if request.method == 'POST':
driver_form = DriverModelForm(request.POST)
car_form_set = CarInlineFormSet(request.POST) # wrong: no instance passed
if driver_form.is_valid():
driver = driver_form.save(commit=False)
car_form_set = CarInlineFormSet(request.POST, instance=driver)
if car_form_set.is_valid():
driver.save()
car_form_set.save()
else:
driver_form = DriverModelForm()
car_form_set = CarInlineFormset()
return render(request, 'template.html', {
'driver_form': driver_form,
'car_form_set': car_form_set
})
更新:
似乎为了简单起见,我遗漏了实际导致问题的细节。吸取的教训
driver\u form
是一个模型表单,car\u form\u set
是一个基于driver\u form
正在添加的实例的内联表单集驾驶员表单
无效,则汽车表单集
没有使用实例初始化。所以是有效的()
既不是真的
也不是假的
。结论:在模板中使用是有效的()
固定视图:
driver = Driver()
if request.method == 'POST':
driver_form = DriverModelForm(request.POST, instance=driver)
if driver_form.is_valid():
driver = driver_form.save(commit=False)
car_form_set = CarInlineFormSet(request.POST, instance=driver)
if car_form_set.is_valid():
driver.save()
car_form_set.save()
else:
driver_form = DriverModelForm(instance=driver)
car_form_set = CarInlineFormset(instance=driver)
return render(request, 'template.html', {
'driver_form': driver_form,
'car_form_set': car_form_set
})
您不需要调用form.is_,它将已经被视图调用。相反,请检查错误:
{% if first_form.errors %}
Please correct errors in the First Form.
{% endif %}
{% if second_form.errors %}
Please correct errors in the Second Form.
{% endif %}
在模板中做这样的事情不是个好主意。顺便说一句,当您呈现模板时,它将使用旧数据,而不是用户提交的数据。@Rohan为什么要使用旧数据?如果使用函数视图,您需要隐式调用.is_valid()。这是真的,我假设code_刺客正确实现了视图@code_刺客,如果这不起作用,请随时使用您正在使用的视图更新您的答案。声明窗体在您第一次调用is_valid()
或accesserrors
时被验证,并且只发生一次,因此应该没有区别。