vsocrates
vsocrates

Reputation: 184

Django Formset field label in error messages

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

Answers (1)

Joe P
Joe P

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

Related Questions