From ab951d242e3de232c7fc9a2f6facfd6aa95f5fe2 Mon Sep 17 00:00:00 2001 From: Christian Klus Date: Tue, 27 Oct 2020 13:13:10 -0500 Subject: [3.1.x] Fixed #32152 -- Fixed grouping by subquery aliases. Regression in 42c08ee46539ef44f8658ebb1cbefb408e0d03fe. Thanks Simon Charette for the review. Backport of 4ac2d4fa42e1659f328c35b6b8d4761b3419c11a from master --- django/db/models/sql/query.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'django/db/models/sql/query.py') diff --git a/django/db/models/sql/query.py b/django/db/models/sql/query.py index 7acef7f654..7a16d4889a 100644 --- a/django/db/models/sql/query.py +++ b/django/db/models/sql/query.py @@ -2148,8 +2148,10 @@ class Query(BaseExpression): field_names.append(f) self.set_extra_mask(extra_names) self.set_annotation_mask(annotation_names) + selected = frozenset(field_names + extra_names + annotation_names) else: field_names = [f.attname for f in self.model._meta.concrete_fields] + selected = frozenset(field_names) # Selected annotations must be known before setting the GROUP BY # clause. if self.group_by is True: @@ -2163,7 +2165,7 @@ class Query(BaseExpression): # the selected fields anymore. group_by = [] for expr in self.group_by: - if isinstance(expr, Ref) and expr.refs not in field_names: + if isinstance(expr, Ref) and expr.refs not in selected: expr = self.annotations[expr.refs] group_by.append(expr) self.group_by = tuple(group_by) -- cgit v1.3