summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--django/contrib/postgres/aggregates/mixins.py7
-rw-r--r--docs/releases/4.1.2.txt4
-rw-r--r--tests/postgres_tests/test_aggregates.py9
3 files changed, 18 insertions, 2 deletions
diff --git a/django/contrib/postgres/aggregates/mixins.py b/django/contrib/postgres/aggregates/mixins.py
index b2f4097b8f..340a917879 100644
--- a/django/contrib/postgres/aggregates/mixins.py
+++ b/django/contrib/postgres/aggregates/mixins.py
@@ -14,10 +14,13 @@ class OrderableAggMixin:
return super().resolve_expression(*args, **kwargs)
def get_source_expressions(self):
- return super().get_source_expressions() + [self.order_by]
+ if self.order_by.source_expressions:
+ return super().get_source_expressions() + [self.order_by]
+ return super().get_source_expressions()
def set_source_expressions(self, exprs):
- *exprs, self.order_by = exprs
+ if isinstance(exprs[-1], OrderByList):
+ *exprs, self.order_by = exprs
return super().set_source_expressions(exprs)
def as_sql(self, compiler, connection):
diff --git a/docs/releases/4.1.2.txt b/docs/releases/4.1.2.txt
index 546ab7a635..4c9b0a60a9 100644
--- a/docs/releases/4.1.2.txt
+++ b/docs/releases/4.1.2.txt
@@ -18,3 +18,7 @@ Bugfixes
* Fixed a bug in Django 4.1 that caused an incorrect validation of
``CheckConstraint`` on ``NULL`` values (:ticket:`33996`).
+
+* Fixed a regression in Django 4.1 that caused a
+ ``QuerySet.values()/values_list()`` crash on ``ArrayAgg()`` and
+ ``JSONBAgg()`` (:ticket:`34016`).
diff --git a/tests/postgres_tests/test_aggregates.py b/tests/postgres_tests/test_aggregates.py
index c2f38e42b6..9cca121802 100644
--- a/tests/postgres_tests/test_aggregates.py
+++ b/tests/postgres_tests/test_aggregates.py
@@ -686,6 +686,15 @@ class TestGeneralAggregate(PostgreSQLTestCase):
],
)
+ def test_values_list(self):
+ tests = [ArrayAgg("integer_field"), JSONBAgg("integer_field")]
+ for aggregation in tests:
+ with self.subTest(aggregation=aggregation):
+ self.assertCountEqual(
+ AggregateTestModel.objects.values_list(aggregation),
+ [([0],), ([1],), ([2],), ([0],)],
+ )
+
class TestAggregateDistinct(PostgreSQLTestCase):
@classmethod