Index: django/db/models/manager.py
===================================================================
--- django/db/models/manager.py	(revision 7188)
+++ django/db/models/manager.py	(working copy)
@@ -95,6 +95,9 @@
     def order_by(self, *args, **kwargs):
         return self.get_query_set().order_by(*args, **kwargs)
 
+    def select_for_update(self, *args, **kwargs): 
+        return self.get_query_set().select_for_update(*args, **kwargs)
+        
     def select_related(self, *args, **kwargs):
         return self.get_query_set().select_related(*args, **kwargs)
 
Index: django/db/models/query.py
===================================================================
--- django/db/models/query.py	(revision 7188)
+++ django/db/models/query.py	(working copy)
@@ -88,16 +88,17 @@
     def __init__(self, model=None):
         self.model = model
         self._filters = Q()
-        self._order_by = None        # Ordering, e.g. ('date', '-name'). If None, use model's ordering.
-        self._select_related = False # Whether to fill cache for related objects.
-        self._max_related_depth = 0  # Maximum "depth" for select_related
-        self._distinct = False       # Whether the query should use SELECT DISTINCT.
-        self._select = {}            # Dictionary of attname -> SQL.
-        self._where = []             # List of extra WHERE clauses to use.
-        self._params = []            # List of params to use for extra WHERE clauses.
-        self._tables = []            # List of extra tables to use.
-        self._offset = None          # OFFSET clause.
-        self._limit = None           # LIMIT clause.
+        self._order_by = None           # Ordering, e.g. ('date', '-name'). If None, use model's ordering.
+        self._select_for_update = False # Whether to select for update.
+        self._select_related = False    # Whether to fill cache for related objects.
+        self._max_related_depth = 0     # Maximum "depth" for select_related
+        self._distinct = False          # Whether the query should use SELECT DISTINCT.
+        self._select = {}               # Dictionary of attname -> SQL.
+        self._where = []                # List of extra WHERE clauses to use.
+        self._params = []               # List of params to use for extra WHERE clauses.
+        self._tables = []               # List of extra tables to use.
+        self._offset = None             # OFFSET clause.
+        self._limit = None              # LIMIT clause.
         self._result_cache = None
 
     ########################
@@ -222,6 +223,7 @@
 
         counter = self._clone()
         counter._order_by = ()
+        counter._select_for_update = False 
         counter._select_related = False
 
         offset = counter._offset
@@ -329,6 +331,7 @@
         del_query = self._clone()
 
         # disable non-supported fields
+        del_query._select_for_update = False
         del_query._select_related = False
         del_query._order_by = []
 
@@ -411,6 +414,10 @@
         else:
             return self._filter_or_exclude(None, **filter_obj)
 
+    def select_for_update(self, true_or_false=True): 
+        "Returns a new QuerySet instance with '_select_for_update' modified." 
+        return self._clone(_select_for_update=true_or_false)
+    
     def select_related(self, true_or_false=True, depth=0):
         "Returns a new QuerySet instance with '_select_related' modified."
         return self._clone(_select_related=true_or_false, _max_related_depth=depth)
@@ -446,6 +453,7 @@
         c.model = self.model
         c._filters = self._filters
         c._order_by = self._order_by
+        c._select_for_update = self._select_for_update
         c._select_related = self._select_related
         c._max_related_depth = self._max_related_depth
         c._distinct = self._distinct
@@ -563,6 +571,10 @@
         else:
             assert self._offset is None, "'offset' is not allowed without 'limit'"
 
+        # FOR UPDATE 
+        if self._select_for_update: 
+            sql.append("%s" % connection.ops.get_for_update_sql())
+        
         return select, " ".join(sql), params
 
 # Use the backend's QuerySet class if it defines one. Otherwise, use _QuerySet.
Index: django/db/backends/__init__.py
===================================================================
--- django/db/backends/__init__.py	(revision 7188)
+++ django/db/backends/__init__.py	(working copy)
@@ -159,6 +159,12 @@
         """
         return cursor.lastrowid
 
+    def get_for_update_sql(self):
+        """
+        Return FOR UPDATE SQL clause to lock row for update
+        """
+        return 'FOR UPDATE' 
+
     def limit_offset_sql(self, limit, offset=None):
         """
         Returns a LIMIT/OFFSET SQL clause, given a limit and optional offset.
