summaryrefslogtreecommitdiff
path: root/django/db/models/query.py
diff options
context:
space:
mode:
Diffstat (limited to 'django/db/models/query.py')
-rw-r--r--django/db/models/query.py14
1 files changed, 14 insertions, 0 deletions
diff --git a/django/db/models/query.py b/django/db/models/query.py
index 67fcb411eb..4e2882e062 100644
--- a/django/db/models/query.py
+++ b/django/db/models/query.py
@@ -1159,6 +1159,20 @@ class QuerySet:
self._for_write = True
query = self.query.chain(sql.UpdateQuery)
query.add_update_values(kwargs)
+
+ # Inline annotations in order_by(), if possible.
+ new_order_by = []
+ for col in query.order_by:
+ if annotation := query.annotations.get(col):
+ if getattr(annotation, "contains_aggregate", False):
+ raise exceptions.FieldError(
+ f"Cannot update when ordering by an aggregate: {annotation}"
+ )
+ new_order_by.append(annotation)
+ else:
+ new_order_by.append(col)
+ query.order_by = tuple(new_order_by)
+
# Clear any annotations so that they won't be present in subqueries.
query.annotations = {}
with transaction.mark_for_rollback_on_error(using=self.db):