mirror of https://github.com/django/django.git
Fixed #24835 -- Fixed QuerySet.exists() after an annotation with Count()
QuerySet.exists() incorrectly handled query.group_by = True case (grouping by all select fields), causing GROUP BY expressions to be wiped along with select fields.
This commit is contained in:
parent
4df7e8483b
commit
801a84ae32
|
@ -489,6 +489,9 @@ class Query(object):
|
||||||
def has_results(self, using):
|
def has_results(self, using):
|
||||||
q = self.clone()
|
q = self.clone()
|
||||||
if not q.distinct:
|
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()
|
||||||
q.clear_select_clause()
|
q.clear_select_clause()
|
||||||
q.clear_ordering(True)
|
q.clear_ordering(True)
|
||||||
q.set_limits(high=1)
|
q.set_limits(high=1)
|
||||||
|
|
|
@ -14,3 +14,6 @@ Bugfixes
|
||||||
|
|
||||||
* Fixed crash during :djadmin:`makemigrations` if a migrations module either
|
* Fixed crash during :djadmin:`makemigrations` if a migrations module either
|
||||||
is missing ``__init__.py`` or is a file (:ticket:`24848`).
|
is missing ``__init__.py`` or is a file (:ticket:`24848`).
|
||||||
|
|
||||||
|
* Fixed ``exists()`` returning incorrect results after annotation with
|
||||||
|
``Count()`` (:ticket:`24835`).
|
||||||
|
|
|
@ -325,6 +325,10 @@ class NonAggregateAnnotationTestCase(TestCase):
|
||||||
lambda a: (a['age'], a['age_count'])
|
lambda a: (a['age'], a['age_count'])
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def test_annotate_exists(self):
|
||||||
|
authors = Author.objects.annotate(c=Count('id')).filter(c__gt=1)
|
||||||
|
self.assertFalse(authors.exists())
|
||||||
|
|
||||||
def test_column_field_ordering(self):
|
def test_column_field_ordering(self):
|
||||||
"""
|
"""
|
||||||
Test that columns are aligned in the correct order for
|
Test that columns are aligned in the correct order for
|
||||||
|
|
Loading…
Reference in New Issue