1
0
mirror of https://github.com/django/django.git synced 2025-10-31 09:41:08 +00:00

Refs #10743 -- Enabled ordering for lookups in ModelAdmin.list_display.

Co-authored-by: Natalia <124304+nessita@users.noreply.github.com>
Co-authored-by: Nina Menezes <https://github.com/nmenezes0>
This commit is contained in:
Tom Carrick
2023-11-16 09:11:27 +01:00
committed by Natalia
parent 4ade8386eb
commit 9cefdfc43f
3 changed files with 62 additions and 2 deletions

View File

@@ -2073,3 +2073,59 @@ class SeleniumTests(AdminSeleniumTestCase):
By.CSS_SELECTOR, "[data-filter-title='It\\'s OK']"
).get_attribute("open")
)
def test_list_display_ordering(self):
from selenium.webdriver.common.by import By
parent_a = Parent.objects.create(name="Parent A")
child_l = Child.objects.create(name="Child L", parent=None)
child_m = Child.objects.create(name="Child M", parent=parent_a)
GrandChild.objects.create(name="Grandchild X", parent=child_m)
GrandChild.objects.create(name="Grandchild Y", parent=child_l)
GrandChild.objects.create(name="Grandchild Z", parent=None)
self.admin_login(username="super", password="secret")
changelist_url = reverse("admin:admin_changelist_grandchild_changelist")
self.selenium.get(self.live_server_url + changelist_url)
def find_result_row_texts():
table = self.selenium.find_element(By.ID, "result_list")
# Drop header from the result list
return [row.text for row in table.find_elements(By.TAG_NAME, "tr")][1:]
def expected_from_queryset(qs):
return [
" ".join("-" if i is None else i for i in item)
for item in qs.values_list(
"name", "parent__name", "parent__parent__name"
)
]
cases = [
# Order ascending by `name`.
("th.sortable.column-name", ("name",)),
# Order descending by `name`.
("th.sortable.column-name", ("-name",)),
# Order ascending by `parent__name`.
("th.sortable.column-parent__name", ("parent__name", "-name")),
# Order descending by `parent__name`.
("th.sortable.column-parent__name", ("-parent__name", "-name")),
# Order ascending by `parent__parent__name`.
(
"th.sortable.column-parent__parent__name",
("parent__parent__name", "-parent__name", "-name"),
),
# Order descending by `parent__parent__name`.
(
"th.sortable.column-parent__parent__name",
("-parent__parent__name", "-parent__name", "-name"),
),
]
for css_selector, ordering in cases:
with self.subTest(ordering=ordering):
# self.selenium.get(self.live_server_url + changelist_url)
self.selenium.find_element(By.CSS_SELECTOR, css_selector).click()
expected = expected_from_queryset(
GrandChild.objects.all().order_by(*ordering)
)
self.assertEqual(find_result_row_texts(), expected)