Commit b5f92938 authored by Jacob Kaplan-Moss's avatar Jacob Kaplan-Moss
Browse files

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

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
parent 12716794
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -292,6 +292,8 @@ class QuerySet(object):
        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 @@ class QuerySet(object):
        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)
+7 −0
Original line number Diff line number Diff line
@@ -63,5 +63,12 @@ a manager method.
>>> 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.

"""
}