From 187a789f99ecbc708de517c6b54d480b68ba59fe Mon Sep 17 00:00:00 2001 From: antoliny0919 Date: Thu, 7 Aug 2025 22:17:50 +0900 Subject: Fixed #34643 -- Moved inputs beneath labels and errors in admin forms. Thanks Sarah Boyce and Jacob Walls for reviews. Co-authored-by: Hrushikesh Vaidya --- django/contrib/admin/static/admin/css/base.css | 17 +--- django/contrib/admin/static/admin/css/forms.css | 93 ++++----------------- .../contrib/admin/static/admin/css/responsive.css | 64 +------------- .../admin/static/admin/css/responsive_rtl.css | 11 --- django/contrib/admin/static/admin/css/rtl.css | 61 +------------- django/contrib/admin/static/admin/css/widgets.css | 4 +- .../static/admin/js/admin/DateTimeShortcuts.js | 9 +- .../templates/admin/auth/user/change_password.html | 30 ++++--- .../admin/templates/admin/includes/fieldset.html | 34 ++++---- .../registration/password_change_form.html | 35 +++++--- .../registration/password_reset_confirm.html | 8 +- .../registration/password_reset_form.html | 2 +- django/contrib/auth/forms.py | 2 +- docs/intro/_images/admin05t.png | Bin 34301 -> 43712 bytes docs/intro/_images/admin07.png | Bin 18339 -> 17554 bytes docs/intro/_images/admin08t.png | Bin 20706 -> 19985 bytes docs/intro/_images/admin09.png | Bin 6955 -> 9249 bytes docs/intro/_images/admin10t.png | Bin 23087 -> 57196 bytes docs/intro/_images/admin14t.png | Bin 17776 -> 40806 bytes docs/ref/contrib/admin/_images/fieldsets.png | Bin 18267 -> 56736 bytes docs/ref/contrib/admin/_images/raw_id_fields.png | Bin 997 -> 4003 bytes docs/ref/contrib/admin/index.txt | 13 +-- docs/releases/6.1.txt | 18 ++++ tests/admin_inlines/tests.py | 24 +++--- tests/admin_views/admin.py | 1 + tests/admin_views/models.py | 4 +- tests/admin_views/tests.py | 38 +++++++-- tests/admin_widgets/tests.py | 35 ++++++++ tests/auth_tests/test_templates.py | 46 ++++++++++ tests/auth_tests/test_views.py | 3 +- 30 files changed, 252 insertions(+), 300 deletions(-) diff --git a/django/contrib/admin/static/admin/css/base.css b/django/contrib/admin/static/admin/css/base.css index ec2ad6ab93..ea7707eb89 100644 --- a/django/contrib/admin/static/admin/css/base.css +++ b/django/contrib/admin/static/admin/css/base.css @@ -498,9 +498,6 @@ input, textarea, select, .form-row p, form .button { font-weight: normal; font-size: 0.8125rem; } -.form-row div.help { - padding: 2px 3px; -} textarea { vertical-align: top; @@ -700,7 +697,7 @@ ul.messagelist li.error { } ul.errorlist { - margin: 0 0 4px; + margin: 0; padding: 0; color: var(--error-fg); background: var(--body-bg); @@ -709,7 +706,6 @@ ul.errorlist { ul.errorlist li { font-size: 0.8125rem; display: block; - margin-bottom: 4px; overflow-wrap: break-word; } @@ -731,17 +727,6 @@ td ul.errorlist li { margin: 0; } -.form-row.errors { - margin: 0; - border: none; - border-bottom: 1px solid var(--hairline-color); - background: none; -} - -.form-row.errors ul.errorlist li { - padding-left: 0; -} - .errors input, .errors select, .errors textarea, td ul.errorlist + input, td ul.errorlist + select, td ul.errorlist + textarea { border: 1px solid var(--error-fg); diff --git a/django/contrib/admin/static/admin/css/forms.css b/django/contrib/admin/static/admin/css/forms.css index 5d2c1d2018..c474368184 100644 --- a/django/contrib/admin/static/admin/css/forms.css +++ b/django/contrib/admin/static/admin/css/forms.css @@ -24,15 +24,18 @@ form .form-row p { .flex-container { display: flex; + gap: 10px; + flex-direction: column; + align-items: flex-start; } -.form-multiline { - flex-wrap: wrap; +.flex-container div.checkbox { + display: flex; } -.form-multiline > div, -.form-multiline > fieldset { - padding-bottom: 10px; +.form-multiline { + flex-wrap: wrap; + flex-direction: row; } /* FORM LABELS */ @@ -41,6 +44,7 @@ legend, label { font-weight: normal; color: var(--body-quiet-color); font-size: 0.8125rem; + padding: 0; } .required legend, legend.required, @@ -59,7 +63,8 @@ form div.radiolist.inline div { } form div.radiolist label { - width: auto; + display: inline-block; + padding: 4px 10px 0 0; } form div.radiolist input[type="radio"] { @@ -94,7 +99,6 @@ fieldset .inline-heading, /* ALIGNED FIELDSETS */ .aligned fieldset { - flex-grow: 1; border-top: none; } @@ -104,21 +108,7 @@ fieldset .inline-heading, .aligned legend { float: inline-start; -} - -.aligned legend, -.aligned label { - display: block; - padding: 4px 10px 0 0; - min-width: 160px; - width: 160px; - word-wrap: break-word; -} - -.aligned label:not(.vCheckboxLabel):after { - content: ''; - display: inline-block; - vertical-align: middle; + padding: 0.5rem 0; } .aligned label + p, .aligned .checkbox-row + div.help, .aligned label + div.readonly { @@ -143,30 +133,14 @@ fieldset .inline-heading, width: 350px; } -form .aligned ul { - margin-left: 160px; - padding-left: 10px; -} - form .aligned div.radiolist { display: block; margin: 0; padding: 0; } -form .aligned p.help, -form .aligned div.help { - margin-top: 0; - margin-left: 160px; - padding-left: 10px; -} - -form .aligned p.date div.help.timezonewarning, -form .aligned p.datetime div.help.timezonewarning, -form .aligned p.time div.help.timezonewarning { +form .aligned fieldset div.help { margin-left: 0; - padding-left: 0; - font-weight: normal; } form .aligned p.help:last-child, @@ -175,16 +149,6 @@ form .aligned div.help:last-child { padding-bottom: 0; } -form .aligned input + p.help, -form .aligned textarea + p.help, -form .aligned select + p.help, -form .aligned input + div.help, -form .aligned textarea + div.help, -form .aligned select + div.help { - margin-left: 160px; - padding-left: 10px; -} - form .aligned select option:checked { background-color: var(--selected-row); color: var(--body-fg); @@ -194,6 +158,11 @@ form .aligned ul li { list-style: none; } +form .aligned div.help ul { + padding-left: 0; + margin-left: 0; +} + form .aligned table p { margin-left: 0; padding-left: 0; @@ -212,32 +181,6 @@ form .aligned table p { width: 610px; } -fieldset .fieldBox { - margin-right: 20px; -} - -/* WIDE FIELDSETS */ - -.wide label, -.wide legend { - width: 200px; -} - -form .wide p.help, -form .wide ul.errorlist, -form .wide div.help { - padding-left: 50px; -} - -form div.help ul { - padding-left: 0; - margin-left: 0; -} - -.colM fieldset.wide .vLargeTextField, .colM fieldset.wide .vXMLLargeTextField { - width: 450px; -} - /* COLLAPSIBLE FIELDSETS */ .collapse summary .fieldset-heading, diff --git a/django/contrib/admin/static/admin/css/responsive.css b/django/contrib/admin/static/admin/css/responsive.css index 93abf79953..c8af03ba90 100644 --- a/django/contrib/admin/static/admin/css/responsive.css +++ b/django/contrib/admin/static/admin/css/responsive.css @@ -205,12 +205,6 @@ input[type="submit"], button { min-height: 0; } - fieldset .fieldBox + .fieldBox { - margin-top: 10px; - padding-top: 10px; - border-top: 1px solid var(--hairline-color); - } - textarea { max-width: 100%; max-height: 120px; @@ -224,7 +218,7 @@ input[type="submit"], button { .aligned .datetimeshortcuts, .aligned .related-lookup + strong { align-self: center; - margin-left: 15px; + margin-left: 0.5rem; } form .aligned div.radiolist { @@ -465,11 +459,7 @@ input[type="submit"], button { } .flex-container { - flex-flow: column; - } - - .flex-container.checkbox-row { - flex-flow: row; + align-items: stretch; } textarea { @@ -480,22 +470,6 @@ input[type="submit"], button { width: auto; } - fieldset .fieldBox + .fieldBox { - margin-top: 15px; - padding-top: 15px; - } - - .aligned legend, - .aligned label { - width: 100%; - min-width: auto; - padding: 0 0 10px; - } - - .aligned label:after { - max-height: 0; - } - .aligned .form-row input, .aligned .form-row select, .aligned .form-row textarea { @@ -513,13 +487,6 @@ input[type="submit"], button { padding: 1px 0 0 5px; } - .aligned label + p, - .aligned label + div.help, - .aligned label + div.readonly { - padding: 0; - margin-left: 0; - } - .aligned p.file-upload { font-size: 0.8125rem; } @@ -533,37 +500,10 @@ input[type="submit"], button { padding-bottom: 0; } - .aligned .timezonewarning { - flex: 1 0 100%; - margin-top: 5px; - } - - form .aligned .form-row div.help { - width: 100%; - margin: 5px 0 0; - padding: 0; - } - - form .aligned ul, - form .aligned ul.errorlist { - margin-left: 0; - padding-left: 0; - } - - form .aligned div.radiolist { - margin-top: 5px; - margin-right: 15px; - margin-bottom: -3px; - } - form .aligned div.radiolist:not(.inline) div + div { margin-top: 5px; } - form .aligned fieldset div.flex-container { - display: unset; - } - /* Related widget */ .related-widget-wrapper { diff --git a/django/contrib/admin/static/admin/css/responsive_rtl.css b/django/contrib/admin/static/admin/css/responsive_rtl.css index b336bbfbe9..cd32867688 100644 --- a/django/contrib/admin/static/admin/css/responsive_rtl.css +++ b/django/contrib/admin/static/admin/css/responsive_rtl.css @@ -48,17 +48,6 @@ /* MOBILE */ @media (max-width: 767px) { - [dir="rtl"] .aligned .related-lookup, - [dir="rtl"] .aligned .datetimeshortcuts { - margin-left: 0; - margin-right: 15px; - } - - [dir="rtl"] .aligned ul, - [dir="rtl"] form .aligned ul.errorlist { - margin-right: 0; - } - [dir="rtl"] #changelist-filter { margin-left: 0; margin-right: 0; diff --git a/django/contrib/admin/static/admin/css/rtl.css b/django/contrib/admin/static/admin/css/rtl.css index ba4d0bf549..aa7c4e8636 100644 --- a/django/contrib/admin/static/admin/css/rtl.css +++ b/django/contrib/admin/static/admin/css/rtl.css @@ -124,29 +124,8 @@ thead th.sorted .text { /* FORMS */ -.aligned label, -.aligned legend { - padding: 0 0 3px 1em; -} - -.submit-row a.deletelink { - margin-left: 0; - margin-right: auto; -} - -.vDateField, .vTimeField { - margin-left: 2px; -} - -.aligned .form-row input { - margin-left: 5px; -} - form .aligned ul { - margin-right: 163px; - padding-right: 10px; - margin-left: 0; - padding-left: 0; + margin: 0; } form ul.inline li { @@ -155,48 +134,10 @@ form ul.inline li { padding-left: 7px; } -form .aligned p.help, -form .aligned div.help { - margin-left: 0; - margin-right: 160px; - padding-right: 10px; -} - -form div.help ul, -form .aligned .checkbox-row + .help, -form .aligned p.date div.help.timezonewarning, -form .aligned p.datetime div.help.timezonewarning, -form .aligned p.time div.help.timezonewarning { - margin-right: 0; - padding-right: 0; -} - -form .wide p.help, -form .wide ul.errorlist, -form .wide div.help { - padding-left: 0; - padding-right: 50px; -} - .submit-row { text-align: right; } -fieldset .fieldBox { - margin-left: 20px; - margin-right: 0; -} - -.errorlist li { - background-position: 100% 12px; - padding: 0; -} - -.errornote { - background-position: 100% 12px; - padding: 10px 12px; -} - /* WIDGETS */ .calendarnav-previous { diff --git a/django/contrib/admin/static/admin/css/widgets.css b/django/contrib/admin/static/admin/css/widgets.css index c0de045c68..c2a3836b90 100644 --- a/django/contrib/admin/static/admin/css/widgets.css +++ b/django/contrib/admin/static/admin/css/widgets.css @@ -302,7 +302,8 @@ p.datetime { } p.datetime label { - display: inline; + display: block; + padding: 0.5rem 0; } .datetime span { @@ -313,7 +314,6 @@ p.datetime label { } .datetime input, .form-row .datetime input.vDateField, .form-row .datetime input.vTimeField { - margin-left: 5px; margin-bottom: 4px; } diff --git a/django/contrib/admin/static/admin/js/admin/DateTimeShortcuts.js b/django/contrib/admin/static/admin/js/admin/DateTimeShortcuts.js index 6251614863..b30a668a2e 100644 --- a/django/contrib/admin/static/admin/js/admin/DateTimeShortcuts.js +++ b/django/contrib/admin/static/admin/js/admin/DateTimeShortcuts.js @@ -68,7 +68,7 @@ } // Check if warning is already there. - if (inp.parentNode.querySelectorAll('.' + warningClass).length) { + if (inp.parentNode.parentNode.querySelectorAll('.' + warningClass).length) { return; } @@ -96,7 +96,12 @@ warning.classList.add('help', warningClass); warning.id = `${field_id}_timezone_warning_helptext`; warning.textContent = message; - inp.parentNode.appendChild(warning); + const errorList = inp.parentNode.parentNode.querySelector('ul.errorlist'); + if (errorList) { + errorList.before(warning); + } else { + inp.parentNode.before(warning); + } }, // Add clock widget to a given field addClock: function(inp) { diff --git a/django/contrib/admin/templates/admin/auth/user/change_password.html b/django/contrib/admin/templates/admin/auth/user/change_password.html index e8d3da82bd..70b68f6de5 100644 --- a/django/contrib/admin/templates/admin/auth/user/change_password.html +++ b/django/contrib/admin/templates/admin/auth/user/change_password.html @@ -39,29 +39,37 @@
- {{ form.usable_password.errors }} -
{{ form.usable_password.legend_tag }} {{ form.usable_password }}
- {% if form.usable_password.help_text %} -
-

{{ form.usable_password.help_text|safe }}

-
- {% endif %} +
{{ form.usable_password.legend_tag }} + {% if form.usable_password.help_text %} +
+

{{ form.usable_password.help_text|safe }}

+
+ {% endif %} + {{ form.usable_password.errors }} + {{ form.usable_password }} +
- {{ form.password1.errors }} -
{{ form.password1.label_tag }} {{ form.password1 }}
+
+ {{ form.password1.label_tag }} {% if form.password1.help_text %}
{{ form.password1.help_text|safe }}
{% endif %} + {{ form.password1.errors }} + {{ form.password1 }} +
- {{ form.password2.errors }} -
{{ form.password2.label_tag }} {{ form.password2 }}
+
+ {{ form.password2.label_tag }} {% if form.password2.help_text %}
{{ form.password2.help_text|safe }}
{% endif %} + {{ form.password2.errors }} + {{ form.password2 }} +
diff --git a/django/contrib/admin/templates/admin/includes/fieldset.html b/django/contrib/admin/templates/admin/includes/fieldset.html index 1fd303ea82..70c68655c5 100644 --- a/django/contrib/admin/templates/admin/includes/fieldset.html +++ b/django/contrib/admin/templates/admin/includes/fieldset.html @@ -8,33 +8,35 @@
{{ fieldset.description|safe }}
{% endif %} {% for line in fieldset %} -
- {% if line.fields|length == 1 %}{{ line.errors }}{% else %}
{% endif %} +
{% for field in line %} {% if field.is_fieldset %}{{ field.label_tag }}{% endif %} -
- {% if not line.fields|length == 1 and not field.is_readonly %}{{ field.errors }}{% endif %} -
- {% if field.is_checkbox %} - {{ field.field }}{% if not field.is_fieldset %}{{ field.label_tag }}{% endif %} - {% else %} - {% if not field.is_fieldset %}{{ field.label_tag }}{% endif %} - {% if field.is_readonly %} -
{{ field.contents }}
- {% else %} - {{ field.field }} - {% endif %} - {% endif %} +
+ {% if field.is_checkbox %} +
+ {{ field.field }} + {% if not field.is_fieldset %}{{ field.label_tag }}{% endif %}
+ {% else %} + {% if not field.is_fieldset %}{{ field.label_tag }}{% endif %} + {% endif %} {% if field.field.help_text %}
{{ field.field.help_text|safe }}
{% endif %} + {% if line.fields|length == 1 %}{{ line.errors }}{% endif %} + {% if not line.fields|length == 1 and not field.is_readonly %}{{ field.errors }}{% endif %} + {% if not field.is_checkbox %} + {% if field.is_readonly %} +
{{ field.contents }}
+ {% else %} + {{ field.field }} + {% endif %} + {% endif %}
{% if field.is_fieldset %}{% endif %} {% endfor %} - {% if not line.fields|length == 1 %}
{% endif %}
{% endfor %} {% if fieldset.name and fieldset.is_collapsible %}{% endif %} diff --git a/django/contrib/admin/templates/registration/password_change_form.html b/django/contrib/admin/templates/registration/password_change_form.html index d377c201ce..91c99c7fd1 100644 --- a/django/contrib/admin/templates/registration/password_change_form.html +++ b/django/contrib/admin/templates/registration/password_change_form.html @@ -31,27 +31,36 @@

{% translate 'Please enter your old password, for security’s sake, and then enter your new password twice so we can verify you typed it in correctly.' %}

-
+
- {{ form.old_password.errors }} -
{{ form.old_password.label_tag }} {{ form.old_password }}
+
+ {{ form.old_password.label_tag }} + {{ form.old_password.errors }} + {{ form.old_password }} +
- {{ form.new_password1.errors }} -
{{ form.new_password1.label_tag }} {{ form.new_password1 }}
- {% if form.new_password1.help_text %} -
{{ form.new_password1.help_text|safe }}
- {% endif %} +
+ {{ form.new_password1.label_tag }} + {% if form.new_password1.help_text %} +
{{ form.new_password1.help_text|safe }}
+ {% endif %} + {{ form.new_password1.errors }} + {{ form.new_password1 }} +
- {{ form.new_password2.errors }} -
{{ form.new_password2.label_tag }} {{ form.new_password2 }}
- {% if form.new_password2.help_text %} -
{{ form.new_password2.help_text|safe }}
- {% endif %} +
+ {{ form.new_password2.label_tag }} + {% if form.new_password2.help_text %} +
{{ form.new_password2.help_text|safe }}
+ {% endif %} + {{ form.new_password2.errors }} + {{ form.new_password2 }} +
diff --git a/django/contrib/admin/templates/registration/password_reset_confirm.html b/django/contrib/admin/templates/registration/password_reset_confirm.html index 2ad675da24..ffe51b59f8 100644 --- a/django/contrib/admin/templates/registration/password_reset_confirm.html +++ b/django/contrib/admin/templates/registration/password_reset_confirm.html @@ -20,16 +20,16 @@
- {{ form.new_password1.errors }} -
+
+ {{ form.new_password1.errors }} {{ form.new_password1 }}
- {{ form.new_password2.errors }} -
+
+ {{ form.new_password2.errors }} {{ form.new_password2 }}
diff --git a/django/contrib/admin/templates/registration/password_reset_form.html b/django/contrib/admin/templates/registration/password_reset_form.html index 3737414d81..31c84fdcc7 100644 --- a/django/contrib/admin/templates/registration/password_reset_form.html +++ b/django/contrib/admin/templates/registration/password_reset_form.html @@ -17,9 +17,9 @@
{% csrf_token %}
- {{ form.email.errors }}
+ {{ form.email.errors }} {{ form.email }}
diff --git a/django/contrib/auth/forms.py b/django/contrib/auth/forms.py index aff0cca342..254a135ec1 100644 --- a/django/contrib/auth/forms.py +++ b/django/contrib/auth/forms.py @@ -158,7 +158,7 @@ class SetUnusablePasswordMixin: required=False, initial="true", choices={"true": _("Enabled"), "false": _("Disabled")}, - widget=forms.RadioSelect(attrs={"class": "radiolist inline"}), + widget=forms.RadioSelect(attrs={"class": "radiolist"}), help_text=help_text, ) diff --git a/docs/intro/_images/admin05t.png b/docs/intro/_images/admin05t.png index de66ee7746..f4e3214721 100644 Binary files a/docs/intro/_images/admin05t.png and b/docs/intro/_images/admin05t.png differ diff --git a/docs/intro/_images/admin07.png b/docs/intro/_images/admin07.png index b591e82217..b5d9a791fd 100644 Binary files a/docs/intro/_images/admin07.png and b/docs/intro/_images/admin07.png differ diff --git a/docs/intro/_images/admin08t.png b/docs/intro/_images/admin08t.png index b77fdc03c6..23f48fdd41 100644 Binary files a/docs/intro/_images/admin08t.png and b/docs/intro/_images/admin08t.png differ diff --git a/docs/intro/_images/admin09.png b/docs/intro/_images/admin09.png index 16ccff4b41..cf2e9a9e1c 100644 Binary files a/docs/intro/_images/admin09.png and b/docs/intro/_images/admin09.png differ diff --git a/docs/intro/_images/admin10t.png b/docs/intro/_images/admin10t.png index e0376ec700..5533531f16 100644 Binary files a/docs/intro/_images/admin10t.png and b/docs/intro/_images/admin10t.png differ diff --git a/docs/intro/_images/admin14t.png b/docs/intro/_images/admin14t.png index 44ae24fe40..2fea20f5c1 100644 Binary files a/docs/intro/_images/admin14t.png and b/docs/intro/_images/admin14t.png differ diff --git a/docs/ref/contrib/admin/_images/fieldsets.png b/docs/ref/contrib/admin/_images/fieldsets.png index e5bc614f25..5b3f472b8d 100644 Binary files a/docs/ref/contrib/admin/_images/fieldsets.png and b/docs/ref/contrib/admin/_images/fieldsets.png differ diff --git a/docs/ref/contrib/admin/_images/raw_id_fields.png b/docs/ref/contrib/admin/_images/raw_id_fields.png index 7f16b11032..42f1d48fc2 100644 Binary files a/docs/ref/contrib/admin/_images/raw_id_fields.png and b/docs/ref/contrib/admin/_images/raw_id_fields.png differ diff --git a/docs/ref/contrib/admin/index.txt b/docs/ref/contrib/admin/index.txt index d52857d6ba..b3c7c2c426 100644 --- a/docs/ref/contrib/admin/index.txt +++ b/docs/ref/contrib/admin/index.txt @@ -418,22 +418,23 @@ subclass:: * ``classes`` A list or tuple containing extra CSS classes to apply to the fieldset. This can include any custom CSS class defined in the project, as well - as any of the CSS classes provided by Django. Within the default admin - site CSS stylesheet, two particularly useful classes are defined: - ``collapse`` and ``wide``. + as the CSS class provided by Django: ``collapse``. Example:: { - "classes": ["wide", "collapse"], + "classes": ["collapse"], } - Fieldsets with the ``wide`` style will be given extra horizontal - space in the admin interface. Fieldsets with a name and the ``collapse`` style will be initially collapsed, using an expandable widget with a toggle for switching their visibility. + .. versionchanged:: 6.1 + + The ``wide`` class has been removed, as it was made obsolete by the + new admin layout. + * ``description`` A string of optional extra text to be displayed at the top of each fieldset, under the heading of the fieldset. diff --git a/docs/releases/6.1.txt b/docs/releases/6.1.txt index 6c6890b811..ef6ae1d424 100644 --- a/docs/releases/6.1.txt +++ b/docs/releases/6.1.txt @@ -99,6 +99,19 @@ Minor features preserve :ref:`named groups ` (e.g. ``choices=[("Group", [("1", "Item")]), ...]``). +* In order to improve accessibility of the admin change forms: + + * Form fields are now shown below their respective labels instead of next to + them. + + * Help text is now shown after the field label and before the field input. + + * Validation errors are now shown after the help text and before the field + input. + + * Checkboxes are an exception to the above changes and continue to be + displayed in their original layout. + :mod:`django.contrib.admindocs` ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -380,6 +393,11 @@ backends. * Set the new ``DatabaseFeatures.supports_inspectdb`` attribute to ``False`` if the management command isn't supported. +:mod:`django.contrib.admin` +--------------------------- + +* The ``wide`` class is removed, as it was made obsolete by the new layout. + :mod:`django.contrib.gis` ------------------------- diff --git a/tests/admin_inlines/tests.py b/tests/admin_inlines/tests.py index 6956c37740..50b3a7baba 100644 --- a/tests/admin_inlines/tests.py +++ b/tests/admin_inlines/tests.py @@ -384,21 +384,23 @@ class TestInline(TestDataMixin, TestCase): response = self.client.get(url) # The whole line containing name + position fields is not hidden. self.assertContains( - response, '
' + response, + "
', ) # The div containing the position field is hidden. self.assertInHTML( - '', response.rendered_content, ) self.assertInHTML( - '', response.rendered_content, ) @@ -419,17 +421,17 @@ class TestInline(TestDataMixin, TestCase): # The whole line containing position field is hidden. self.assertInHTML( '