Reputation: 184
Is there a simple way to get the field label in an error message for a Django formset. I am able to do it in a normal form like so:
{% if form.errors %}
{% for field in form %}
{% for error in field.errors %}
<div class="alert alert-danger">
<strong>{{ field.label }}: {{ error|escape }}</strong>
</div>
{% endfor %}
{% endfor %}
{% for error in form.non_field_errors %}
<div class="alert alert-danger">
<strong>{{ error|escape }}</strong>
</div>
{% endfor %}
{% endif %}
However, I'd like the same thing for the formset. The closest I've gotten is
{% if formset.errors %}
{% for dict in formset.errors %}
{% for field, error in dict.items %}
<div class="alert alert-danger">
<strong>{{ field }}: {{ error|escape }}</strong>
</div>
{% endfor %}
{% endfor %}
{% endfor %}
{% for error in formset.non_field_errors %}
<div class="alert alert-danger">
<strong>{{ error|escape }}</strong>
</div>
{% endfor %}
{% endif %}
However, this gives me the field name (e.g. pub_date
) instead of the label (e.g. Publication Date). Any help much appreciated!
Upvotes: 0
Views: 307
Reputation: 485
I can't see a simple way to get from the field string to the field instance in a template, so you may have to iterate over forms and fields instead of formset.errors
:
{% if formset.errors %}
{% for form in formset %}
{% for field in form %}
{% if field.errors %}
<div class="alert alert-danger">
<strong>{{ field.label }}: {{ field.errors|escape }}</strong>
</div>
{% endif %}
{% endfor %}
{% endfor %}
{% for error in formset.non_field_errors %}
<div class="alert alert-danger">
<strong>{{ error|escape }}</strong>
</div>
{% endfor %}
{% endif %}
Upvotes: 1