diff options
| author | Maxim Petrov <maximpetrov@yahoo.com> | 2020-08-19 05:22:12 +0300 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2020-08-19 06:43:54 +0200 |
| commit | bf6d07730c41ae23836d8dae98626fe8614307e2 (patch) | |
| tree | 9abb04e5bd1631fdd6c58ef35a6d286627ec1289 /django | |
| parent | e2e34f4de3b90f3820ee11d49cc369ef573bc2ef (diff) | |
Fixed #31902 -- Fixed crash of ExclusionConstraint on expressions with params.
Diffstat (limited to 'django')
| -rw-r--r-- | django/contrib/postgres/constraints.py | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/django/contrib/postgres/constraints.py b/django/contrib/postgres/constraints.py index 2ae72c402e..12c185a777 100644 --- a/django/contrib/postgres/constraints.py +++ b/django/contrib/postgres/constraints.py @@ -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 % { |
