|
@@ -1116,10 +1116,11 @@ class Subquery(Expression):
|
|
|
def external_aliases(self):
|
|
|
return self.query.external_aliases
|
|
|
|
|
|
- def as_sql(self, compiler, connection, template=None, **extra_context):
|
|
|
+ def as_sql(self, compiler, connection, template=None, query=None, **extra_context):
|
|
|
connection.ops.check_expression_support(self)
|
|
|
template_params = {**self.extra, **extra_context}
|
|
|
- subquery_sql, sql_params = self.query.as_sql(compiler, connection)
|
|
|
+ query = query or self.query
|
|
|
+ subquery_sql, sql_params = query.as_sql(compiler, connection)
|
|
|
template_params['subquery'] = subquery_sql[1:-1]
|
|
|
|
|
|
template = template or template_params.get('template', self.template)
|
|
@@ -1142,7 +1143,6 @@ class Exists(Subquery):
|
|
|
def __init__(self, queryset, negated=False, **kwargs):
|
|
|
self.negated = negated
|
|
|
super().__init__(queryset, **kwargs)
|
|
|
- self.query = self.query.exists()
|
|
|
|
|
|
def __invert__(self):
|
|
|
clone = self.copy()
|
|
@@ -1150,7 +1150,14 @@ class Exists(Subquery):
|
|
|
return clone
|
|
|
|
|
|
def as_sql(self, compiler, connection, template=None, **extra_context):
|
|
|
- sql, params = super().as_sql(compiler, connection, template, **extra_context)
|
|
|
+ query = self.query.exists(using=connection.alias)
|
|
|
+ sql, params = super().as_sql(
|
|
|
+ compiler,
|
|
|
+ connection,
|
|
|
+ template=template,
|
|
|
+ query=query,
|
|
|
+ **extra_context,
|
|
|
+ )
|
|
|
if self.negated:
|
|
|
sql = 'NOT {}'.format(sql)
|
|
|
return sql, params
|