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:
@@ -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)
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user