1
0
mirror of https://github.com/django/django.git synced 2025-10-31 09:41:08 +00:00

Refs #31136 -- Made QuerySet.values()/values_list() group only by selected annotation.

Regression in 0f843fdd5b.
This commit is contained in:
Mariusz Felisiak
2020-01-15 09:32:42 +01:00
committed by GitHub
parent 63e6ee1f99
commit 59b4e99dd0
2 changed files with 33 additions and 7 deletions

View File

@@ -2093,13 +2093,6 @@ class Query(BaseExpression):
self.clear_deferred_loading()
self.clear_select_fields()
if self.group_by is True:
self.add_fields((f.attname for f in self.model._meta.concrete_fields), False)
# Disable GROUP BY aliases to avoid orphaning references to the
# SELECT clause which is about to be cleared.
self.set_group_by(allow_aliases=False)
self.clear_select_fields()
if fields:
field_names = []
extra_names = []
@@ -2121,6 +2114,14 @@ class Query(BaseExpression):
self.set_annotation_mask(annotation_names)
else:
field_names = [f.attname for f in self.model._meta.concrete_fields]
# Selected annotations must be known before setting the GROUP BY
# clause.
if self.group_by is True:
self.add_fields((f.attname for f in self.model._meta.concrete_fields), False)
# Disable GROUP BY aliases to avoid orphaning references to the
# SELECT clause which is about to be cleared.
self.set_group_by(allow_aliases=False)
self.clear_select_fields()
self.values_select = tuple(field_names)
self.add_fields(field_names, True)