Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Fixed #7298: prevent update() on sliced QuerySet since UPDATE doesn't…

… reliably support LIMIT/OFFSET. Thanks, George Vilches.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@7601 bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information...
commit b5f92938abd64f5577eea9f80925d71bc7968c09 1 parent 1271679
@jacobian jacobian authored
Showing with 11 additions and 0 deletions.
  1. +4 −0 django/db/models/query.py
  2. +7 −0 tests/modeltests/update/models.py
View
4 django/db/models/query.py
@@ -292,6 +292,8 @@ def update(self, **kwargs):
Updates all elements in the current QuerySet, setting all the given
fields to the appropriate values.
"""
+ assert self.query.can_filter(), \
+ "Cannot update a query once a slice has been taken."
query = self.query.clone(sql.UpdateQuery)
query.add_update_values(kwargs)
query.execute_sql(None)
@@ -306,6 +308,8 @@ def _update(self, values):
code (it requires too much poking around at model internals to be
useful at that level).
"""
+ assert self.query.can_filter(), \
+ "Cannot update a query once a slice has been taken."
query = self.query.clone(sql.UpdateQuery)
query.add_update_fields(values)
query.execute_sql(None)
View
7 tests/modeltests/update/models.py
@@ -63,5 +63,12 @@ def __unicode__(self):
>>> DataPoint.objects.values('value').distinct()
[{'value': u'thing'}]
+We do not support update on already sliced query sets.
+
+>>> DataPoint.objects.all()[:2].update(another_value='another thing')
+Traceback (most recent call last):
+ ...
+AssertionError: Cannot update a query once a slice has been taken.
+
"""
}

0 comments on commit b5f9293

Please sign in to comment.
Something went wrong with that request. Please try again.