[3.0.x] Fixed #31136 -- Disabled grouping by aliases on QuerySet.values()/values_list().
Regression infb3f034f1c
. Thanks Sigurd Ljødal for the report. Backport of0f843fdd5b
from master
This commit is contained in:
parent
02cda09b13
commit
4f81f6d236
|
@ -2100,7 +2100,9 @@ class Query(BaseExpression):
|
|||
|
||||
if self.group_by is True:
|
||||
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()
|
||||
|
||||
if fields:
|
||||
|
|
|
@ -12,3 +12,7 @@ Bugfixes
|
|||
* Fixed a regression in Django 3.0 that caused a crash when subtracting
|
||||
``DateField``, ``DateTimeField``, or ``TimeField`` from a ``Subquery()``
|
||||
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`).
|
||||
|
|
|
@ -1149,6 +1149,20 @@ class AggregateTestCase(TestCase):
|
|||
)
|
||||
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')
|
||||
def test_group_by_subquery_annotation(self):
|
||||
"""
|
||||
|
|
Loading…
Reference in New Issue