mirror of
				https://github.com/django/django.git
				synced 2025-10-31 01:25:32 +00:00 
			
		
		
		
	[5.2.x] Fixed #36405 -- Fixed OrderableAggMixin.order_by using OuterRef.
co-authored-by: Simon Charette <charette.s@gmail.com>
Backport of c2615a0500 from main.
			
			
This commit is contained in:
		
				
					committed by
					
						 Sarah Boyce
						Sarah Boyce
					
				
			
			
				
	
			
			
			
						parent
						
							c29e3092fd
						
					
				
				
					commit
					7e4b371eb0
				
			| @@ -27,11 +27,6 @@ class OrderableAggMixin: | |||||||
|             self.order_by = OrderByList(order_by) |             self.order_by = OrderByList(order_by) | ||||||
|         super().__init__(*expressions, **extra) |         super().__init__(*expressions, **extra) | ||||||
|  |  | ||||||
|     def resolve_expression(self, *args, **kwargs): |  | ||||||
|         if self.order_by is not None: |  | ||||||
|             self.order_by = self.order_by.resolve_expression(*args, **kwargs) |  | ||||||
|         return super().resolve_expression(*args, **kwargs) |  | ||||||
|  |  | ||||||
|     def get_source_expressions(self): |     def get_source_expressions(self): | ||||||
|         return super().get_source_expressions() + [self.order_by] |         return super().get_source_expressions() + [self.order_by] | ||||||
|  |  | ||||||
|   | |||||||
| @@ -25,3 +25,7 @@ Bugfixes | |||||||
|  |  | ||||||
| * Fixed a regression in Django 5.2 that caused a crash when using ``OuterRef`` | * Fixed a regression in Django 5.2 that caused a crash when using ``OuterRef`` | ||||||
|   in the ``filter`` argument of an ``Aggregate`` expression (:ticket:`36404`). |   in the ``filter`` argument of an ``Aggregate`` expression (:ticket:`36404`). | ||||||
|  |  | ||||||
|  | * Fixed a regression in Django 5.2 that caused a crash when using ``OuterRef`` | ||||||
|  |   in PostgreSQL aggregate functions ``ArrayAgg``, ``StringAgg``, and | ||||||
|  |   ``JSONBAgg`` (:ticket:`36405`). | ||||||
|   | |||||||
| @@ -350,6 +350,18 @@ class TestGeneralAggregate(PostgreSQLTestCase): | |||||||
|                         [[], [], [], []], |                         [[], [], [], []], | ||||||
|                     ) |                     ) | ||||||
|  |  | ||||||
|  |     def test_array_agg_with_order_by_outer_ref(self): | ||||||
|  |         StatTestModel.objects.annotate( | ||||||
|  |             atm_ids=Subquery( | ||||||
|  |                 AggregateTestModel.objects.annotate( | ||||||
|  |                     ids=ArrayAgg( | ||||||
|  |                         "id", | ||||||
|  |                         order_by=[OuterRef("int1")], | ||||||
|  |                     ) | ||||||
|  |                 ).values("ids")[:1] | ||||||
|  |             ) | ||||||
|  |         ) | ||||||
|  |  | ||||||
|     def test_bit_and_general(self): |     def test_bit_and_general(self): | ||||||
|         values = AggregateTestModel.objects.filter(integer_field__in=[0, 1]).aggregate( |         values = AggregateTestModel.objects.filter(integer_field__in=[0, 1]).aggregate( | ||||||
|             bitand=BitAnd("integer_field") |             bitand=BitAnd("integer_field") | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user