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

Thanks Tobias Bengfort for the report.
This commit is contained in:
Simon Charette 2022-02-01 13:27:41 -05:00 committed by Mariusz Felisiak
parent 770d3e6a4c
commit b7d1da5a62
2 changed files with 19 additions and 7 deletions

View file

@ -1211,13 +1211,18 @@ class Exists(Subquery):
def as_sql(self, compiler, connection, template=None, **extra_context):
query = self.query.exists(using=connection.alias)
sql, params = super().as_sql(
compiler,
connection,
template=template,
query=query,
**extra_context,
)
try:
sql, params = super().as_sql(
compiler,
connection,
template=template,
query=query,
**extra_context,
)
except EmptyResultSet:
if self.negated:
return '', ()
raise
if self.negated:
sql = 'NOT {}'.format(sql)
return sql, params