mirror of
				https://github.com/django/django.git
				synced 2025-10-31 09:41:08 +00:00 
			
		
		
		
	Fixed #27897 -- Fixed crash with 'pk' in ModelAdmin.search_filters.
This commit is contained in:
		
				
					committed by
					
						 Tim Graham
						Tim Graham
					
				
			
			
				
	
			
			
			
						parent
						
							7a7b331cd5
						
					
				
				
					commit
					6bc4ff36db
				
			| @@ -32,6 +32,8 @@ def lookup_needs_distinct(opts, lookup_path): | ||||
|         lookup_fields = lookup_fields[:-1] | ||||
|     # Now go through the fields (following all relations) and look for an m2m | ||||
|     for field_name in lookup_fields: | ||||
|         if field_name == 'pk': | ||||
|             field_name = opts.pk.name | ||||
|         field = opts.get_field(field_name) | ||||
|         if hasattr(field, 'get_path_info'): | ||||
|             # This field is a relation, update opts to follow the relation | ||||
|   | ||||
| @@ -414,6 +414,21 @@ class ChangeListTests(TestCase): | ||||
|         # There's only one Concert instance | ||||
|         self.assertEqual(cl.queryset.count(), 1) | ||||
|  | ||||
|     def test_pk_in_search_fields(self): | ||||
|         band = Group.objects.create(name='The Hype') | ||||
|         Concert.objects.create(name='Woodstock', group=band) | ||||
|  | ||||
|         m = ConcertAdmin(Concert, custom_site) | ||||
|         m.search_fields = ['group__pk'] | ||||
|  | ||||
|         request = self.factory.get('/concert/', data={SEARCH_VAR: band.pk}) | ||||
|         cl = ChangeList(request, Concert, *get_changelist_args(m)) | ||||
|         self.assertEqual(cl.queryset.count(), 1) | ||||
|  | ||||
|         request = self.factory.get('/concert/', data={SEARCH_VAR: band.pk + 5}) | ||||
|         cl = ChangeList(request, Concert, *get_changelist_args(m)) | ||||
|         self.assertEqual(cl.queryset.count(), 0) | ||||
|  | ||||
|     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