summaryrefslogtreecommitdiff
path: root/django/db/models/sql
diff options
context:
space:
mode:
Diffstat (limited to 'django/db/models/sql')
-rw-r--r--django/db/models/sql/query.py8
1 files changed, 6 insertions, 2 deletions
diff --git a/django/db/models/sql/query.py b/django/db/models/sql/query.py
index cc1d4b1d38..7429939cf9 100644
--- a/django/db/models/sql/query.py
+++ b/django/db/models/sql/query.py
@@ -527,7 +527,9 @@ class Query(BaseExpression):
if not q.distinct:
if q.group_by is True:
q.add_fields((f.attname for f in self.model._meta.concrete_fields), False)
- q.set_group_by()
+ # Disable GROUP BY aliases to avoid orphaning references to the
+ # SELECT clause which is about to be cleared.
+ q.set_group_by(allow_aliases=False)
q.clear_select_clause()
q.clear_ordering(True)
q.set_limits(high=1)
@@ -1920,7 +1922,7 @@ class Query(BaseExpression):
if force_empty:
self.default_ordering = False
- def set_group_by(self):
+ def set_group_by(self, allow_aliases=True):
"""
Expand the GROUP BY clause required by the query.
@@ -1943,6 +1945,8 @@ class Query(BaseExpression):
warnings.warn(msg, category=RemovedInDjango40Warning)
group_by_cols = annotation.get_group_by_cols()
else:
+ if not allow_aliases:
+ alias = None
group_by_cols = annotation.get_group_by_cols(alias=alias)
group_by.extend(group_by_cols)
self.group_by = tuple(group_by)