diff options
| author | Jacob Walls <jacobtylerwalls@gmail.com> | 2026-01-23 15:10:31 -0500 |
|---|---|---|
| committer | Jacob Walls <jacobtylerwalls@gmail.com> | 2026-02-02 08:16:08 -0500 |
| commit | f9bfb5279892dba27345270a6b7198c12571ffb7 (patch) | |
| tree | 07cd8a46ebd55a47a5cb56e628ab7a409b07cc99 | |
| parent | da2125b5629ebca438241c5ce3eb833c63214aeb (diff) | |
[6.0.x] Fixed #36788 -- Fixed horizontal form field alignment under <fieldset> in the admin.
Thanks Antoliny for the review.
Regression in 4187da258fe212d494cb578a0bc2b52c4979ab95.
Backport of b665a67d61a8a4fd2ad85aeb77282bc49541723f from main.
| -rw-r--r-- | django/contrib/admin/static/admin/css/forms.css | 2 | ||||
| -rw-r--r-- | docs/releases/6.0.2.txt | 3 | ||||
| -rw-r--r-- | tests/admin_views/admin.py | 12 | ||||
| -rw-r--r-- | tests/admin_views/tests.py | 27 |
4 files changed, 41 insertions, 3 deletions
diff --git a/django/contrib/admin/static/admin/css/forms.css b/django/contrib/admin/static/admin/css/forms.css index 6d13d43350..e3b7d58857 100644 --- a/django/contrib/admin/static/admin/css/forms.css +++ b/django/contrib/admin/static/admin/css/forms.css @@ -93,7 +93,7 @@ fieldset .inline-heading, /* ALIGNED FIELDSETS */ .aligned fieldset { - width: 100%; + flex-grow: 1; border-top: none; } diff --git a/docs/releases/6.0.2.txt b/docs/releases/6.0.2.txt index d74a8bd763..7dd10dbb4e 100644 --- a/docs/releases/6.0.2.txt +++ b/docs/releases/6.0.2.txt @@ -15,6 +15,9 @@ Bugfixes to wrap below the changelist when filter elements contained long text (:ticket:`36850`). +* Fixed a visual regression in Django 6.0 for admin form fields grouped under a + ``<fieldset>`` aligned horizontally (:ticket:`36788`). + * Fixed a regression in Django 6.0 where ``auto_now_add`` field values were not populated during ``INSERT`` operations, due to incorrect parameters passed to ``field.pre_save()`` (:ticket:`36847`). diff --git a/tests/admin_views/admin.py b/tests/admin_views/admin.py index 69570a8062..499bba401a 100644 --- a/tests/admin_views/admin.py +++ b/tests/admin_views/admin.py @@ -1193,6 +1193,18 @@ class CamelCaseAdmin(admin.ModelAdmin): class CourseAdmin(admin.ModelAdmin): radio_fields = {"difficulty": admin.VERTICAL} + fieldsets = ( + ( + None, + { + "fields": ( + ("title", "difficulty"), + ("materials", "start_datetime"), + ("categories"), + ), + }, + ), + ) site = admin.AdminSite(name="admin") diff --git a/tests/admin_views/tests.py b/tests/admin_views/tests.py index e5eba4f466..203e1d25a9 100644 --- a/tests/admin_views/tests.py +++ b/tests/admin_views/tests.py @@ -6919,10 +6919,10 @@ class SeleniumTests(AdminSeleniumTestCase): title="Django Class", materials="django_documents" ) expected_legend_tags_text = [ - "Materials:", "Difficulty:", - "Categories:", + "Materials:", "Start datetime:", + "Categories:", ] url = reverse("admin:admin_views_course_change", args=(course.pk,)) self.selenium.get(self.live_server_url + url) @@ -6934,6 +6934,29 @@ class SeleniumTests(AdminSeleniumTestCase): self.assertEqual(legend.text, expected_legend_tags_text[index]) @screenshot_cases(["desktop_size", "mobile_size", "rtl", "dark", "high_contrast"]) + def test_use_fieldset_with_grouped_fields(self): + from selenium.webdriver.common.by import By + + self.admin_login( + username="super", password="secret", login_url=reverse("admin:index") + ) + self.selenium.get( + self.live_server_url + reverse("admin:admin_views_course_add") + ) + multiline = self.selenium.find_element( + By.CSS_SELECTOR, "#content-main .field-difficulty, .form-multiline" + ) + # Two field boxes. + field_boxes = multiline.find_elements(By.CSS_SELECTOR, "div > div.fieldBox") + self.assertEqual(len(field_boxes), 2) + # One of them is under a <fieldset>. + under_fieldset = multiline.find_elements( + By.CSS_SELECTOR, "fieldset > div > div.fieldBox" + ) + self.assertEqual(len(under_fieldset), 1) + self.take_screenshot("horizontal_fieldset") + + @screenshot_cases(["desktop_size", "mobile_size", "rtl", "dark", "high_contrast"]) @override_settings(MESSAGE_LEVEL=10) def test_messages(self): from selenium.webdriver.common.by import By |
