From 1674c70525bc370132a1db27617e468081920d11 Mon Sep 17 00:00:00 2001 From: David Sanders Date: Sat, 24 Sep 2022 00:15:03 +1000 Subject: [PATCH] Fixed #34024 -- Fixed crash when aggregating querysets with Q objects annotations. This reverts b64db05b9cedd96905d637a2d824cbbf428e40e7. It was reasonable to assume it was unnecessary code as there were no failing tests upon its removal. This commit adds the necessary regression tests for the failing condition identified in #34024 alongside the original tests added in the PR for which WhereNode.is_summary was introduced. --- django/db/models/sql/where.py | 4 ++++ tests/aggregation_regress/tests.py | 3 +++ 2 files changed, 7 insertions(+) diff --git a/django/db/models/sql/where.py b/django/db/models/sql/where.py index e2af46a309..5ce7e4e55c 100644 --- a/django/db/models/sql/where.py +++ b/django/db/models/sql/where.py @@ -244,6 +244,10 @@ class WhereNode(tree.Node): def contains_over_clause(self): return self._contains_over_clause(self) + @property + def is_summary(self): + return any(child.is_summary for child in self.children) + @staticmethod def _resolve_leaf(expr, query, *args, **kwargs): if hasattr(expr, "resolve_expression"): diff --git a/tests/aggregation_regress/tests.py b/tests/aggregation_regress/tests.py index e15e7e41d9..6d6902b61a 100644 --- a/tests/aggregation_regress/tests.py +++ b/tests/aggregation_regress/tests.py @@ -554,6 +554,9 @@ class AggregationTests(TestCase): 325, ) + def test_q_annotation_aggregate(self): + self.assertEqual(Book.objects.annotate(has_pk=Q(pk__isnull=False)).count(), 6) + def test_decimal_aggregate_annotation_filter(self): """ Filtering on an aggregate annotation with Decimal values should work.