Fixed #31136 -- Disabled grouping by aliases on QuerySet.values()/values_list().

Regression in fb3f034f1c.

Thanks Sigurd Ljødal for the report.
This commit is contained in:
Mariusz Felisiak 2020-01-04 20:49:11 +01:00 committed by GitHub
parent 495d7a1ddf
commit 0f843fdd5b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 21 additions and 1 deletions

View File

@ -2095,7 +2095,9 @@ class Query(BaseExpression):
if self.group_by is True: if self.group_by is True:
self.add_fields((f.attname for f in self.model._meta.concrete_fields), False) self.add_fields((f.attname for f in self.model._meta.concrete_fields), False)
self.set_group_by() # 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.clear_select_fields()
if fields: if fields:

View File

@ -12,3 +12,7 @@ Bugfixes
* Fixed a regression in Django 3.0 that caused a crash when subtracting * Fixed a regression in Django 3.0 that caused a crash when subtracting
``DateField``, ``DateTimeField``, or ``TimeField`` from a ``Subquery()`` ``DateField``, ``DateTimeField``, or ``TimeField`` from a ``Subquery()``
annotation (:ticket:`31133`). annotation (:ticket:`31133`).
* Fixed a regression in Django 3.0 where ``QuerySet.values()`` and
``values_list()`` crashed if a queryset contained an aggregation and
``Exists()`` annotation (:ticket:`31136`).

View File

@ -1151,6 +1151,20 @@ class AggregateTestCase(TestCase):
) )
self.assertTrue(publisher_qs.exists()) self.assertTrue(publisher_qs.exists())
def test_aggregation_exists_annotation(self):
published_books = Book.objects.filter(publisher=OuterRef('pk'))
publisher_qs = Publisher.objects.annotate(
published_book=Exists(published_books),
count=Count('book'),
).values_list('name', flat=True)
self.assertCountEqual(list(publisher_qs), [
'Apress',
'Morgan Kaufmann',
"Jonno's House of Books",
'Prentice Hall',
'Sams',
])
@skipUnlessDBFeature('supports_subqueries_in_group_by') @skipUnlessDBFeature('supports_subqueries_in_group_by')
def test_group_by_subquery_annotation(self): def test_group_by_subquery_annotation(self):
""" """