diff options
Diffstat (limited to 'django/db/models/sql/subqueries.py')
| -rw-r--r-- | django/db/models/sql/subqueries.py | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/django/db/models/sql/subqueries.py b/django/db/models/sql/subqueries.py index 0a59b403c8..f2589ea2b6 100644 --- a/django/db/models/sql/subqueries.py +++ b/django/db/models/sql/subqueries.py @@ -5,6 +5,7 @@ Query subclasses which provide extra functionality beyond simple data retrieval. from django.core.exceptions import FieldError from django.db.models.sql.constants import * from django.db.models.sql.datastructures import Date +from django.db.models.sql.expressions import SQLEvaluator from django.db.models.sql.query import Query from django.db.models.sql.where import AND, Constraint @@ -136,7 +137,11 @@ class UpdateQuery(Query): result.append('SET') values, update_params = [], [] for name, val, placeholder in self.values: - if val is not None: + if hasattr(val, 'as_sql'): + sql, params = val.as_sql(qn) + values.append('%s = %s' % (qn(name), sql)) + update_params.extend(params) + elif val is not None: values.append('%s = %s' % (qn(name), placeholder)) update_params.append(val) else: @@ -251,6 +256,8 @@ class UpdateQuery(Query): else: placeholder = '%s' + if hasattr(val, 'evaluate'): + val = SQLEvaluator(val, self, allow_joins=False) if model: self.add_related_update(model, field.column, val, placeholder) else: |
