diff options
| author | Simon Charette <charette.s@gmail.com> | 2019-12-21 23:22:49 -0500 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2019-12-23 09:24:03 +0100 |
| commit | 720de4d0441fcfdb543051389c70efbe66ed962a (patch) | |
| tree | 46a2e2195b684dce0fe55116aaa477ba4f73d85c /django/db/models/sql/query.py | |
| parent | cebd41e41603c3ca77c5b29d6cd20c1bff43827f (diff) | |
Fixed #31109 -- Disabled grouping by aliases on QuerySet.exists().
Clearing the SELECT clause in Query.has_results was orphaning GROUP BY
references to it.
Thanks Thierry Bastian for the report and Baptiste Mispelon for the
bisect.
Regression in fb3f034f1c63160c0ff13c609acd01c18be12f80.
Diffstat (limited to 'django/db/models/sql/query.py')
| -rw-r--r-- | django/db/models/sql/query.py | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/django/db/models/sql/query.py b/django/db/models/sql/query.py index ac4822e18a..fc423b6acf 100644 --- a/django/db/models/sql/query.py +++ b/django/db/models/sql/query.py @@ -526,7 +526,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) @@ -1916,7 +1918,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. @@ -1938,6 +1940,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) |
