1
0
mirror of https://github.com/django/django.git synced 2024-12-22 17:16:24 +00:00

Refs #33482 -- Fixed QuerySet selecting and filtering againts negated Exists() with empty queryset.

Regression in b7d1da5a62.
This commit is contained in:
Mariusz Felisiak 2022-02-07 20:34:21 +01:00 committed by GitHub
parent 25514b604a
commit 6f185a53a2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 12 additions and 1 deletions

View File

@ -1221,7 +1221,10 @@ class Exists(Subquery):
) )
except EmptyResultSet: except EmptyResultSet:
if self.negated: if self.negated:
return '', () features = compiler.connection.features
if not features.supports_boolean_expr_in_select_clause:
return "1=1", ()
return compiler.compile(Value(True))
raise raise
if self.negated: if self.negated:
sql = 'NOT {}'.format(sql) sql = 'NOT {}'.format(sql)

View File

@ -1918,6 +1918,14 @@ class ExistsTests(TestCase):
) )
self.assertSequenceEqual(qs, [manager]) self.assertSequenceEqual(qs, [manager])
def test_select_negated_empty_exists(self):
manager = Manager.objects.create()
qs = Manager.objects.annotate(
not_exists=~Exists(Manager.objects.none())
).filter(pk=manager.pk)
self.assertSequenceEqual(qs, [manager])
self.assertIs(qs.get().not_exists, True)
class FieldTransformTests(TestCase): class FieldTransformTests(TestCase):