summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--django/db/models/expressions.py4
-rw-r--r--docs/releases/4.2.4.txt3
-rw-r--r--tests/aggregation/tests.py10
3 files changed, 16 insertions, 1 deletions
diff --git a/django/db/models/expressions.py b/django/db/models/expressions.py
index 280cb967b4..a3d08d4734 100644
--- a/django/db/models/expressions.py
+++ b/django/db/models/expressions.py
@@ -1201,7 +1201,9 @@ class Ref(Expression):
return {self.refs}
def relabeled_clone(self, relabels):
- return self
+ clone = self.copy()
+ clone.source = self.source.relabeled_clone(relabels)
+ return clone
def as_sql(self, compiler, connection):
return connection.ops.quote_name(self.refs), []
diff --git a/docs/releases/4.2.4.txt b/docs/releases/4.2.4.txt
index 3921dd9b3e..a39818e3b8 100644
--- a/docs/releases/4.2.4.txt
+++ b/docs/releases/4.2.4.txt
@@ -12,3 +12,6 @@ Bugfixes
* Fixed a regression in Django 4.2 that caused a crash of
``QuerySet.aggregate()`` with aggregates referencing window functions
(:ticket:`34717`).
+
+* Fixed a regression in Django 4.2 that caused a crash when grouping by a
+ reference in a subquery (:ticket:`34748`).
diff --git a/tests/aggregation/tests.py b/tests/aggregation/tests.py
index db69246952..9f2a7c8841 100644
--- a/tests/aggregation/tests.py
+++ b/tests/aggregation/tests.py
@@ -2116,6 +2116,16 @@ class AggregateTestCase(TestCase):
},
)
+ def test_group_by_reference_subquery(self):
+ author_qs = (
+ Author.objects.annotate(publisher_id=F("book__publisher"))
+ .values("publisher_id")
+ .annotate(cnt=Count("*"))
+ .values("publisher_id")
+ )
+ qs = Publisher.objects.filter(pk__in=author_qs)
+ self.assertCountEqual(qs, [self.p1, self.p2, self.p3, self.p4])
+
class AggregateAnnotationPruningTests(TestCase):
@classmethod