summaryrefslogtreecommitdiff
path: root/tests/admin_changelist
diff options
context:
space:
mode:
authorJacob Walls <jacobtylerwalls@gmail.com>2021-10-27 15:30:03 -0400
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2021-11-09 07:00:36 +0100
commit948d6d880500bc925e23fde29e0f7ff7cc52cac5 (patch)
tree4036937cdfa5b83c39a2865e1265b0801f9e605b /tests/admin_changelist
parent91acfc3514280370535f1dd6bebee57760bac7b9 (diff)
downloaddjango-948d6d880500bc925e23fde29e0f7ff7cc52cac5.tar.gz
Refs #16063 -- Added tests for searching against multiple related fields in admin changelist.
Diffstat (limited to 'tests/admin_changelist')
-rw-r--r--tests/admin_changelist/tests.py51
1 files changed, 51 insertions, 0 deletions
diff --git a/tests/admin_changelist/tests.py b/tests/admin_changelist/tests.py
index 0626af3fe7..92ea0dd718 100644
--- a/tests/admin_changelist/tests.py
+++ b/tests/admin_changelist/tests.py
@@ -513,6 +513,57 @@ class ChangeListTests(TestCase):
cl.queryset.delete()
self.assertEqual(cl.queryset.count(), 0)
+ def test_multiple_search_fields(self):
+ """
+ All rows containing each of the searched words are returned, where each
+ word must be in one of search_fields.
+ """
+ band_duo = Group.objects.create(name='Duo')
+ band_hype = Group.objects.create(name='The Hype')
+ mary = Musician.objects.create(name='Mary Halvorson')
+ jonathan = Musician.objects.create(name='Jonathan Finlayson')
+ band_duo.members.set([mary, jonathan])
+ Concert.objects.create(name='Tiny desk concert', group=band_duo)
+ Concert.objects.create(name='Woodstock concert', group=band_hype)
+ # FK lookup.
+ concert_model_admin = ConcertAdmin(Concert, custom_site)
+ concert_model_admin.search_fields = ['group__name', 'name']
+ # Reverse FK lookup.
+ group_model_admin = GroupAdmin(Group, custom_site)
+ group_model_admin.search_fields = ['name', 'concert__name', 'members__name']
+ for search_string, result_count in (
+ ('Duo Concert', 1),
+ ('Tiny Desk Concert', 1),
+ ('Concert', 2),
+ ('Other Concert', 0),
+ ('Duo Woodstock', 0),
+ ):
+ with self.subTest(search_string=search_string):
+ # FK lookup.
+ request = self.factory.get('/concert/', data={SEARCH_VAR: search_string})
+ request.user = self.superuser
+ concert_changelist = concert_model_admin.get_changelist_instance(request)
+ self.assertEqual(concert_changelist.queryset.count(), result_count)
+ # Reverse FK lookup.
+ request = self.factory.get('/group/', data={SEARCH_VAR: search_string})
+ request.user = self.superuser
+ group_changelist = group_model_admin.get_changelist_instance(request)
+ self.assertEqual(group_changelist.queryset.count(), result_count)
+ # Many-to-many lookup.
+ for search_string, result_count in (
+ ('Finlayson Duo Tiny', 1),
+ ('Finlayson', 1),
+ ('Finlayson Hype', 0),
+ ('Jonathan Finlayson Duo', 1),
+ ('Mary Jonathan Duo', 1),
+ ('Oscar Finlayson Duo', 0),
+ ):
+ with self.subTest(search_string=search_string):
+ request = self.factory.get('/group/', data={SEARCH_VAR: search_string})
+ request.user = self.superuser
+ group_changelist = group_model_admin.get_changelist_instance(request)
+ self.assertEqual(group_changelist.queryset.count(), result_count)
+
def test_pk_in_search_fields(self):
band = Group.objects.create(name='The Hype')
Concert.objects.create(name='Woodstock', group=band)