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

Refs #26001 -- Handled relationship exact lookups in ModelAdmin.search_fields.

This commit is contained in:
Sarah Boyce
2024-11-04 16:09:55 +01:00
parent 5bd5805811
commit 5fa4ccab7e
3 changed files with 47 additions and 29 deletions

View File

@@ -56,6 +56,7 @@ class ChildAdmin(admin.ModelAdmin):
class GrandChildAdmin(admin.ModelAdmin):
list_display = ["name", "parent__name", "parent__parent__name"]
search_fields = ["parent__name__exact", "parent__age__exact"]
site.register(GrandChild, GrandChildAdmin)

View File

@@ -879,6 +879,28 @@ class ChangeListTests(TestCase):
cl = model_admin.get_changelist_instance(request)
self.assertCountEqual(cl.queryset, expected_result)
def test_search_with_exact_lookup_relationship_field(self):
child = Child.objects.create(name="I am a child", age=11)
grandchild = GrandChild.objects.create(name="I am a grandchild", parent=child)
model_admin = GrandChildAdmin(GrandChild, custom_site)
request = self.factory.get("/", data={SEARCH_VAR: "'I am a child'"})
request.user = self.superuser
cl = model_admin.get_changelist_instance(request)
self.assertCountEqual(cl.queryset, [grandchild])
for search_term, expected_result in [
("11", [grandchild]),
("'I am a child'", [grandchild]),
("1", []),
("A", []),
("random", []),
]:
request = self.factory.get("/", data={SEARCH_VAR: search_term})
request.user = self.superuser
with self.subTest(search_term=search_term):
cl = model_admin.get_changelist_instance(request)
self.assertCountEqual(cl.queryset, expected_result)
def test_no_distinct_for_m2m_in_list_filter_without_params(self):
"""
If a ManyToManyField is in list_filter but isn't in any lookup params,