mirror of
https://github.com/django/django.git
synced 2025-08-06 03:48:38 +00:00
Fixed #31902 -- Fixed crash of ExclusionConstraint on expressions with params.
This commit is contained in:
parent
e2e34f4de3
commit
bf6d07730c
2 changed files with 17 additions and 4 deletions
|
@ -66,20 +66,21 @@ class ExclusionConstraint(BaseConstraint):
|
|||
self.opclasses = opclasses
|
||||
super().__init__(name=name)
|
||||
|
||||
def _get_expression_sql(self, compiler, connection, query):
|
||||
def _get_expression_sql(self, compiler, schema_editor, query):
|
||||
expressions = []
|
||||
for idx, (expression, operator) in enumerate(self.expressions):
|
||||
if isinstance(expression, str):
|
||||
expression = F(expression)
|
||||
expression = expression.resolve_expression(query=query)
|
||||
sql, params = expression.as_sql(compiler, connection)
|
||||
sql, params = expression.as_sql(compiler, schema_editor.connection)
|
||||
try:
|
||||
opclass = self.opclasses[idx]
|
||||
if opclass:
|
||||
sql = '%s %s' % (sql, opclass)
|
||||
except IndexError:
|
||||
pass
|
||||
expressions.append('%s WITH %s' % (sql % params, operator))
|
||||
sql = sql % tuple(schema_editor.quote_value(p) for p in params)
|
||||
expressions.append('%s WITH %s' % (sql, operator))
|
||||
return expressions
|
||||
|
||||
def _get_condition_sql(self, compiler, schema_editor, query):
|
||||
|
@ -92,7 +93,7 @@ class ExclusionConstraint(BaseConstraint):
|
|||
def constraint_sql(self, model, schema_editor):
|
||||
query = Query(model, alias_cols=False)
|
||||
compiler = query.get_compiler(connection=schema_editor.connection)
|
||||
expressions = self._get_expression_sql(compiler, schema_editor.connection, query)
|
||||
expressions = self._get_expression_sql(compiler, schema_editor, query)
|
||||
condition = self._get_condition_sql(compiler, schema_editor, query)
|
||||
include = [model._meta.get_field(field_name).column for field_name in self.include]
|
||||
return self.template % {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue