Code

Ticket #2705: for_update.diff

File for_update.diff, 1.5 KB (added by Hawkeye, 8 years ago)
Line 
1Index: django/db/models/query.py
2===================================================================
3--- django/db/models/query.py   (revision 3752)
4+++ django/db/models/query.py   (working copy)
5@@ -88,6 +88,7 @@
6         self._offset = None          # OFFSET clause.
7         self._limit = None           # LIMIT clause.
8         self._result_cache = None
9+        self._for_update = False
10 
11     ########################
12     # PYTHON MAGIC METHODS #
13@@ -372,6 +373,10 @@
14     def distinct(self, true_or_false=True):
15         "Returns a new QuerySet instance with '_distinct' modified."
16         return self._clone(_distinct=true_or_false)
17+   
18+    def for_update(self, update=True):
19+        assert update is True or update is False
20+        return self._clone(_for_update=update)
21 
22     def extra(self, select=None, where=None, params=None, tables=None):
23         assert self._limit is None and self._offset is None, \
24@@ -402,6 +407,7 @@
25         c._tables = self._tables[:]
26         c._offset = self._offset
27         c._limit = self._limit
28+        c._for_update = self._for_update
29         c.__dict__.update(kwargs)
30         return c
31 
32@@ -505,6 +511,9 @@
33             sql.append("%s " % backend.get_limit_offset_sql(self._limit, self._offset))
34         else:
35             assert self._offset is None, "'offset' is not allowed without 'limit'"
36+           
37+        if self._for_update is True:
38+            sql.append("FOR UPDATE ")
39 
40         return select, " ".join(sql), params
41