diff options
| author | Nilesh Kumar Pahari <nileshpahari@protonmail.com> | 2026-01-13 00:39:48 +0530 |
|---|---|---|
| committer | Jacob Walls <jacobtylerwalls@gmail.com> | 2026-01-26 10:26:25 -0500 |
| commit | c4429af53f7e7752cd6980960a38f977693ecb09 (patch) | |
| tree | 9e203fed2a94bf7a8677fc2b987b4989016f2dfa | |
| parent | 9814676ea75bfe5c5d5244c50ccfe1f652a2f058 (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.css | 2 | ||||
| -rw-r--r-- | docs/releases/6.0.2.txt | 5 | ||||
| -rw-r--r-- | tests/admin_views/models.py | 8 | ||||
| -rw-r--r-- | tests/admin_views/tests.py | 15 |
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): |
