summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdam Johnson <me@adamj.eu>2025-05-21 14:48:59 +0200
committerSarah Boyce <42296566+sarahboyce@users.noreply.github.com>2025-05-23 16:23:34 +0200
commit7e4b371eb070d892e9c27eacbe140c78b7d34059 (patch)
treeb5e58e902d75f2a09ed8a9adceb0e0dd4c115f53
parentc29e3092fdb1136f0945ce2be8f14c3853d6c8da (diff)
[5.2.x] Fixed #36405 -- Fixed OrderableAggMixin.order_by using OuterRef.
co-authored-by: Simon Charette <charette.s@gmail.com> Backport of c2615a050036eda0bca090c707191076220cee9f from main.
-rw-r--r--django/contrib/postgres/aggregates/mixins.py5
-rw-r--r--docs/releases/5.2.2.txt4
-rw-r--r--tests/postgres_tests/test_aggregates.py12
3 files changed, 16 insertions, 5 deletions
diff --git a/django/contrib/postgres/aggregates/mixins.py b/django/contrib/postgres/aggregates/mixins.py
index 6af43a7fea..cd5adacd96 100644
--- a/django/contrib/postgres/aggregates/mixins.py
+++ b/django/contrib/postgres/aggregates/mixins.py
@@ -27,11 +27,6 @@ class OrderableAggMixin:
self.order_by = OrderByList(order_by)
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):
return super().get_source_expressions() + [self.order_by]
diff --git a/docs/releases/5.2.2.txt b/docs/releases/5.2.2.txt
index b8deb1c928..a506430b33 100644
--- a/docs/releases/5.2.2.txt
+++ b/docs/releases/5.2.2.txt
@@ -25,3 +25,7 @@ Bugfixes
* Fixed a regression in Django 5.2 that caused a crash when using ``OuterRef``
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`).
diff --git a/tests/postgres_tests/test_aggregates.py b/tests/postgres_tests/test_aggregates.py
index ddd3b6bbd0..0037fb9f83 100644
--- a/tests/postgres_tests/test_aggregates.py
+++ b/tests/postgres_tests/test_aggregates.py
@@ -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):
values = AggregateTestModel.objects.filter(integer_field__in=[0, 1]).aggregate(
bitand=BitAnd("integer_field")