mirror of
				https://github.com/django/django.git
				synced 2025-10-31 09:41:08 +00:00 
			
		
		
		
	Fixed #24835 -- Fixed QuerySet.exists() after an annotation with Count()
QuerySet.exists() incorrectly handled query.group_by = True case (grouping by all select fields), causing GROUP BY expressions to be wiped along with select fields.
This commit is contained in:
		
				
					committed by
					
						 Tim Graham
						Tim Graham
					
				
			
			
				
	
			
			
			
						parent
						
							4df7e8483b
						
					
				
				
					commit
					801a84ae32
				
			| @@ -489,6 +489,9 @@ class Query(object): | ||||
|     def has_results(self, using): | ||||
|         q = self.clone() | ||||
|         if not q.distinct: | ||||
|             if q.group_by is True: | ||||
|                 q.add_fields((f.attname for f in self.model._meta.concrete_fields), False) | ||||
|                 q.set_group_by() | ||||
|             q.clear_select_clause() | ||||
|         q.clear_ordering(True) | ||||
|         q.set_limits(high=1) | ||||
|   | ||||
| @@ -14,3 +14,6 @@ Bugfixes | ||||
|  | ||||
| * Fixed crash during :djadmin:`makemigrations` if a migrations module either | ||||
|   is missing ``__init__.py`` or is a file (:ticket:`24848`). | ||||
|  | ||||
| * Fixed ``exists()`` returning incorrect results after annotation with | ||||
|   ``Count()`` (:ticket:`24835`). | ||||
|   | ||||
| @@ -325,6 +325,10 @@ class NonAggregateAnnotationTestCase(TestCase): | ||||
|             lambda a: (a['age'], a['age_count']) | ||||
|         ) | ||||
|  | ||||
|     def test_annotate_exists(self): | ||||
|         authors = Author.objects.annotate(c=Count('id')).filter(c__gt=1) | ||||
|         self.assertFalse(authors.exists()) | ||||
|  | ||||
|     def test_column_field_ordering(self): | ||||
|         """ | ||||
|         Test that columns are aligned in the correct order for | ||||
|   | ||||
		Reference in New Issue
	
	Block a user