如何检测表单集在模板中是不是有任何错误?
Posted
技术标签:
【中文标题】如何检测表单集在模板中是不是有任何错误?【英文标题】:How do I detect if a formset has any errors at all in a template?如何检测表单集在模板中是否有任何错误? 【发布时间】:2011-03-20 16:48:22 【问题描述】:感谢 django 中出色的内联模型表单集,我有一个非常高级的表单,其中包含 4 个内联表单集。在模板中,我在选项卡中显示每个表单集。一切都很顺利,但如果该选项卡中的表单集有任何验证错误,我想将选项卡涂成红色。所以我尝试了这个:
<div id="tabs">
<ul>
<li><a href="#foo-tab"% if forms.FooFormSet.errors % class="error"% endif %>Foo</a></li>
<li><a href="#bar-tab"% if forms.BarFormSet.errors % class="error"% endif %>Bar</a></li>
<li><a href="#zoo-tab"% if forms.ZooFormSet.errors % class="error"% endif %>Zoo</a></li>
<li><a href="#doo-tab"% if forms.DooFormSet.errors % class="error"% endif %>Doo</a></li>
</ul>
<div id="foo-tab"></div>
<div id="bar-tab"></div>
<div id="zoo-tab"></div>
<div id="doo-tab"></div>
</div>
但它不起作用,因为 forms.*Set.errors 是一个带有空字典的列表(因此它总是会返回 True),例如 [, , ] (表单集中的表单数量是相同的formset.errors 中的空字典数量
我认为一种解决方案可能是将 BaseInlineFormSet 子类化并添加一个 has_errors 方法或其他方法,然后将该子类基用于我的所有表单集。还有其他建议吗?谢谢!
【问题讨论】:
【参考方案1】:您可以检查表单集方法is_valid
的结果,该方法依次检查每个表单的有效性:% if forms.FooFormSet.is_valid %
。
据我所知,如果表单已经过验证,则或多或少是无操作(不触及数据库,不重新验证表单),因此根本不会损害性能。
【讨论】:
谢谢!这种工作,如果表单尚未发布,它 is_valid 将返回 false 但我可以通过分配 is_post: True 与上下文或其他东西来解决这个问题 @Andreas:嗯,好点,我当然没有想到那个。但是,您可以进行not is_bound or is_valid
类型的检查。 is_bound
是 False
如果表单集/表单在没有任何数据的情况下被初始化(initial
不计算在内), - 正是您所说的“表单尚未发布”。【参考方案2】:
最好使用total_error_count
函数
https://docs.djangoproject.com/en/2.0/topics/forms/formsets/#django.forms.formsets.BaseFormSet.total_error_count
【讨论】:
以上是关于如何检测表单集在模板中是不是有任何错误?的主要内容,如果未能解决你的问题,请参考以下文章