summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacob Walls <jacobtylerwalls@gmail.com>2026-01-23 15:10:31 -0500
committerJacob Walls <jacobtylerwalls@gmail.com>2026-02-02 08:16:08 -0500
commitf9bfb5279892dba27345270a6b7198c12571ffb7 (patch)
tree07cd8a46ebd55a47a5cb56e628ab7a409b07cc99
parentda2125b5629ebca438241c5ce3eb833c63214aeb (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.css2
-rw-r--r--docs/releases/6.0.2.txt3
-rw-r--r--tests/admin_views/admin.py12
-rw-r--r--tests/admin_views/tests.py27
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