From f9bfb5279892dba27345270a6b7198c12571ffb7 Mon Sep 17 00:00:00 2001 From: Jacob Walls Date: Fri, 23 Jan 2026 15:10:31 -0500 Subject: [6.0.x] Fixed #36788 -- Fixed horizontal form field alignment under
in the admin. Thanks Antoliny for the review. Regression in 4187da258fe212d494cb578a0bc2b52c4979ab95. Backport of b665a67d61a8a4fd2ad85aeb77282bc49541723f from main. --- django/contrib/admin/static/admin/css/forms.css | 2 +- docs/releases/6.0.2.txt | 3 +++ tests/admin_views/admin.py | 12 +++++++++++ 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 + ``
`` 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) @@ -6933,6 +6933,29 @@ class SeleniumTests(AdminSeleniumTestCase): legend = fieldset.find_element(By.TAG_NAME, "legend") 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
. + 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): -- cgit v1.3