Opened 6 years ago

Closed 5 years ago

#12646 closed (fixed)

Flawed error display in admin when using fieldsets.

Reported by: schinckel Owned by: nobody
Component: contrib.admin Version: 1.1
Severity: Keywords: design_ux
Cc: Triage Stage: Accepted
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: UI/UX:


When using fieldsets within the admin, and an error occurs within one field of a line, then all fields within that line are marked as error by the css. That is, every field gets a red border, when really only the fields with actual errors should have a red border.

Related, but less annoying: the error messages are piled up at the top of the fieldset line, rather than being close to the field with the error.

I overcame both issues using a custom template for fieldset, and some extra css:

  • put an extra class on when there are no errors for this field, and an entry in the admin-extra.css setting the border-color back.
  • remove the line.errors tag, and replace by appropriate field.field.errors tags within the for loop for fields within the line.

Change History (4)

comment:1 Changed 6 years ago by schinckel

  • Needs documentation unset
  • Needs tests unset
  • Patch needs improvement unset

My replacement for the admin/includes/fieldset.html template, if it is useful:

<fieldset class="module aligned {{ fieldset.classes }}">
    {% if %}<h2>{{ }}</h2>{% endif %}
    {% if fieldset.description %}
        <div class="description">{{ fieldset.description|safe }}</div>
    {% endif %}
    {% for line in fieldset %}
        <div class="form-row{% if line.errors %} errors{% endif %} {% for field in line %}{{ }} {% endfor %} ">
            {% for field in line %}
                <div{% if not line.fields|length_is:"1" %} class="field-box {% if not field.field.errors %}no-errors{% endif %}"{% endif %}>
                    {% if field.is_checkbox %}
                        {{ field.field }}{{ field.label_tag }}
                    {% else %}
                        {{ field.label_tag }}
                        {% if field.is_readonly %}
                            <p>{{ field.contents }}</p>
                        {% else %}
                            {{ field.field }}
                        {% endif %}
                    {% endif %}
                    {% if field.field.errors %}
                        {{ field.field.errors }}
                    {% endif %}
                    {% if field.field.field.help_text %}
                        <p class="help">{{ field.field.field.help_text|safe }}</p>
                    {% endif %}
            {% endfor %}
    {% endfor %}

comment:2 Changed 6 years ago by schinckel

Note: I haven't submitted a patch against django, as i am overriding the template in my project(s).

comment:3 Changed 6 years ago by russellm

  • Component changed from Uncategorized to django.contrib.admin
  • Keywords design_ux added
  • Triage Stage changed from Unreviewed to Accepted

comment:4 Changed 5 years ago by julien

  • Resolution set to fixed
  • Status changed from new to closed

I'm pretty sure this was fixed in [14999].

Note: See TracTickets for help on using tickets.
Back to Top