summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNilesh Kumar Pahari <nileshpahari@protonmail.com>2026-01-13 00:39:48 +0530
committerJacob Walls <jacobtylerwalls@gmail.com>2026-01-26 10:26:25 -0500
commitc4429af53f7e7752cd6980960a38f977693ecb09 (patch)
tree9e203fed2a94bf7a8677fc2b987b4989016f2dfa
parent9814676ea75bfe5c5d5244c50ccfe1f652a2f058 (diff)
[6.0.x] Fixed #36850 -- Prevented admin filter sidebar from wrapping below the changelist.
Removed flex-wrap from .changelist-form-container and added min-width to the main content container to ensure proper layout behavior. Regression in 6ea331907996a51842da55c1f8d65eea7b367c7d. Backport of e92d1e3b7858981185e93d717c5727544d66b66e from main.
-rw-r--r--django/contrib/admin/static/admin/css/changelists.css2
-rw-r--r--docs/releases/6.0.2.txt5
-rw-r--r--tests/admin_views/models.py8
-rw-r--r--tests/admin_views/tests.py15
4 files changed, 27 insertions, 3 deletions
diff --git a/django/contrib/admin/static/admin/css/changelists.css b/django/contrib/admin/static/admin/css/changelists.css
index 60cbaf21eb..0f367f811e 100644
--- a/django/contrib/admin/static/admin/css/changelists.css
+++ b/django/contrib/admin/static/admin/css/changelists.css
@@ -2,7 +2,6 @@
#changelist .changelist-form-container {
display: flex;
- flex-wrap: wrap;
align-items: flex-start;
width: 100%;
}
@@ -16,6 +15,7 @@
}
#changelist .changelist-form-container:has(#changelist-filter) > div {
+ min-width: 0;
max-width: calc(100% - 270px);
}
diff --git a/docs/releases/6.0.2.txt b/docs/releases/6.0.2.txt
index c708f699bb..c437275f3f 100644
--- a/docs/releases/6.0.2.txt
+++ b/docs/releases/6.0.2.txt
@@ -9,4 +9,7 @@ Django 6.0.2 fixes several bugs in 6.0.1.
Bugfixes
========
-* ...
+* Fixed a visual regression in Django 6.0 that caused the admin filter sidebar
+ to wrap below the changelist when filter elements contained long text
+ (:ticket:`36850`).
+
diff --git a/tests/admin_views/models.py b/tests/admin_views/models.py
index 4e2d13efa8..fe127f57d3 100644
--- a/tests/admin_views/models.py
+++ b/tests/admin_views/models.py
@@ -266,7 +266,13 @@ class Person(models.Model):
(2, "Female"),
)
name = models.CharField(max_length=100)
- gender = models.IntegerField(choices=GENDER_CHOICES)
+ gender = models.IntegerField(
+ choices=GENDER_CHOICES,
+ verbose_name=(
+ "very very very very very very very very very "
+ "loooooooooooooooooooooooooooooooooooooooooong name"
+ ),
+ )
age = models.IntegerField(default=21)
alive = models.BooleanField(default=True)
diff --git a/tests/admin_views/tests.py b/tests/admin_views/tests.py
index ad37416cbf..e5eba4f466 100644
--- a/tests/admin_views/tests.py
+++ b/tests/admin_views/tests.py
@@ -7059,6 +7059,21 @@ class SeleniumTests(AdminSeleniumTestCase):
self.assertTrue(show_all.is_displayed())
self.take_screenshot("pagination")
+ @screenshot_cases(["desktop_size", "mobile_size", "rtl", "dark", "high_contrast"])
+ def test_changelist_filter_sidebar_with_long_verbose_fields(self):
+ from selenium.webdriver.common.by import By
+
+ self.admin_login(
+ username="super", password="secret", login_url=reverse("admin:index")
+ )
+ Person.objects.create(name="John", gender=1)
+ self.selenium.get(
+ self.live_server_url + reverse("admin:admin_views_person_changelist")
+ )
+ changelist_filter = self.selenium.find_element(By.ID, "changelist-filter")
+ self.assertTrue(changelist_filter.is_displayed())
+ self.take_screenshot("filter_sidebar")
+
@override_settings(ROOT_URLCONF="admin_views.urls")
class ReadonlyTest(AdminFieldExtractionMixin, TestCase):