/ / Como faço para detectar se um formset tem algum erro em um modelo? - django, django-templates, django-forms, inline-formset

Como faço para detectar se um formset tem algum erro em um modelo? - django, django-templates, django-forms, inline-formset

Graças aos fantásticos modelos em linha emdjango Eu tenho um formulário bem avançado com 4 formsets inline. No template eu exibo cada formset em uma aba. Tudo funciona muito bem, mas eu gostaria de colorir uma aba vermelha se o formset naquela aba tiver algum erro de validação. Então eu tentei isso:

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

Mas isso não funciona porque as formas. * Set.errors é uma lista com dicionários vazios (então sempre retornará True) como [{}, {}, {}] (a quantidade de formulários nos formsets é a mesma quantidade de dicionários vazios em formset.errors

Uma solução que eu acho que poderia ser a de subclasse BaseInlineFormSet e adicionar um método has_errors ou algo assim, e então usar essa base subclasse para todos os meus formsets. Alguma outra sugestão? Obrigado!

Respostas:

5 para resposta № 1

Você pode verificar o resultado do método do formset is_valid, que por sua vez verifica cada forma de validade: {% if forms.FooFormSet.is_valid %}.

Tanto quanto eu sei, é mais ou menos um não-op (banco de dados não é tocado, formulários não são revalidados) se os formulários já foram submetidos a validação, por isso não vai prejudicar o desempenho em tudo.


0 para resposta № 2

é melhor usar total_error_count função https://docs.djangoproject.com/en/2.0/topics/forms/formsets/#django.forms.formsets.BaseFormSet.total_error_count