[4.2.x] Fixed #34748 -- Fixed queryset crash when grouping by a reference in a subquery.

Regression in dd68af62b2.

Thanks Toan Vuong for the report.

Backport of 4087367ba8 from main
This commit is contained in:
Simon Charette 2023-07-28 07:45:23 -04:00 committed by Mariusz Felisiak
parent a52a2b6678
commit 739da73164
3 changed files with 16 additions and 1 deletions

View File

@ -1181,7 +1181,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), []

View File

@ -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`).

View File

@ -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