如何在Django中向表单集添加non_form_errors?

时间:2019-04-30 09:48:07

标签: django django-forms

您好,在我的项目中,我需要找到一种向我使用的表单集添加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&#39;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 %}

我想念什么吗?

1 个答案:

答案 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