From 246eb4836a6fb967880f838aa0d22ecfdca8b6f1 Mon Sep 17 00:00:00 2001 From: Raj Desai Date: Fri, 20 Jan 2023 03:15:05 +0530 Subject: [PATCH] Fixed #34254 -- Fixed return value of Exists() with empty queryset. Thanks Simon Charette for reviews. --- django/db/models/expressions.py | 1 + tests/annotations/tests.py | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/django/db/models/expressions.py b/django/db/models/expressions.py index cac3c0aae8..21a49bc229 100644 --- a/django/db/models/expressions.py +++ b/django/db/models/expressions.py @@ -1546,6 +1546,7 @@ class Subquery(BaseExpression, Combinable): class Exists(Subquery): template = "EXISTS(%(subquery)s)" output_field = fields.BooleanField() + empty_result_set_value = False def __init__(self, queryset, **kwargs): super().__init__(queryset, **kwargs) diff --git a/tests/annotations/tests.py b/tests/annotations/tests.py index d05af552b4..e0cdbf1e0b 100644 --- a/tests/annotations/tests.py +++ b/tests/annotations/tests.py @@ -1017,6 +1017,14 @@ class NonAggregateAnnotationTestCase(TestCase): ], ) + def test_annotation_exists_none_query(self): + self.assertIs( + Author.objects.annotate(exists=Exists(Company.objects.none())) + .get(pk=self.a1.pk) + .exists, + False, + ) + def test_annotation_exists_aggregate_values_chaining(self): qs = ( Book.objects.values("publisher")