错误 'non_form_errors' 不包括特殊字符或引号

2024-10-04 03:15:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用inlineformset_factory并创建了一个forms.BaseInlineFormSet来重写clean函数以进行一些验证。验证工作,表单不被接受,但是重新加载页面时ValidationError消息不会出现

这是我的课程表:

class BaseDetailFormSet(forms.BaseInlineFormSet):

    def clean(self):
        super(BaseDetailFormSet, self).clean()
        if any(self.errors):
            return self.errors

        for form in self.forms:
            product = form.cleaned_data['product']
            if form.cleaned_data['quantity_sold'] > product.quantity_in_stock:
                raise forms.ValidationError(_('not enough products'))


DetailFormset = inlineformset_factory(Invoices,
                                      InvoiceDetail,
                                      fields=('product', 'quantity_sold'),
                                      widgets= {'product': forms.Select(
                                        attrs={
                                            'class': 'search',
                                            'data-live-search': 'true'
                                        })},
                                      formset=BaseDetailFormSet,
                                      extra=1)

以及我的html代码:

<form class="form-inline" method="post" action="">
                    {% csrf_token%}
                    {% include '_layouts/form_snippet.html' %}
                    <table class="table">
                        {{inlines.management_form}}
                        {%for form in inlines.forms%}
                            {% if forloop.first%}
                                <thead>
                                <tr>
                                    {%for field in form.visible_fields%}
                                    <th>{{field.label|capfirst}}</th>
                                    {%endfor%}
                            {%endif%}
                                </tr>
                                </thead>
                                        <tr class="formset_row">
                                    {{ form.non_form_errors }}

                                    {% for field in form.visible_fields %}
                                        <td>
                                            {# Include the hidden fields in the form #}
                                            {% if forloop.first %}
                                                {% for hidden in form.hidden_fields %}
                                                    {{ hidden }}
                                                {% endfor %}
                                            {% endif %}
                                            {{ field }}
                                        </td>
                                    {% endfor %}
                                </tr>
                            {% endfor %}
                    </table>

                        <button type="submit" value="Add" class="btn btn-inverse">{% trans 'Submit Invoice' %}</button>

                </form>

知道如何显示验证错误消息或为什么不显示它吗


Tags: inselfformcleanfieldfieldsforif
1条回答
网友
1楼 · 发布于 2024-10-04 03:15:52

non_form_errors属于表单集而不是表单

因此,您可以通过以下方式显示:

{{ formset.non_form_errors }}

或者在您的例子中,因为您使用了变量inlines

{{ inlines.non_form_errors }}

因为它属于formset,所以应该在forloop的外部通过表单执行此操作

如果窗体上有不属于任何字段的错误,则可以使用

{{ form.non_field_errors }}

相关问题 更多 >