您好,在我的项目中,我需要找到一种向我使用的表单集添加non_form_error的方法。
我不能使用此表单集的clean函数,因为我需要传递其他表单中的cleaned值。
我首先检查所有表单和表单集是否有效,然后尝试在我的视图中执行以下操作:
error = ValidationError(_("The total amount of tranches doesn't match the loan amount"),code='tranche_total_amount')
tranche_formset._non_form_errors.append(error)
print(tranche_formset.non_form_errors())
#then I render all my forms again
return self.render_to_response(
self.get_context_data(
form = form,
... #other forms here,
tranches = tranche_formset,
)
)
在终端中,我可以看到错误显示正确:
<ul class="errorlist"><li>The total amount of tranches doesn't match the loan amount</li></ul>
但是在我的模板中,错误未显示:
{% if tranches.non_form_errors%}
<div class="alert alert-danger mt-2" role="alert">
{{ tranches.non_form_errors}}
</div>
{% endif %}
我想念什么吗?
答案 0 :(得分:0)
供以后参考,此代码可解决问题所在的地方:
return self.render_to_response(
self.get_context_data(
form = form,
... #other forms here,
tranches = tranche_formset,
)
)
问题是我正在回调该视图的get_context_data,但是由于我在其中定义了表单集,因此我的non_form_errors没有通过上下文传递。
这是我解决这个问题的方法:
return self.render_to_response(
context['tranches_error']=True
)
然后在get_context_data中:
def get_context_data(self, **kwargs):
context= super(CreateLoan,self).get_context_data(**kwargs)
if not kwargs.pop('tranches_error', None):
tranche_formset = TrancheInlineFormset(self.request.POST or None, prefix='tranches')
context['tranches'] = tranche_formset
...
return context