diff --git a/openerp/fields.py b/openerp/fields.py
index 71ded7c4a5e4c01d55dbc17aa76812d1ba70a701..4cfb2879747a52191b43b2c673931a8c6b4e8246 100644
--- a/openerp/fields.py
+++ b/openerp/fields.py
@@ -418,9 +418,9 @@ class Field(object):
 
     def _compute_related(self, records):
         """ Compute the related field `self` on `records`. """
-        for record in records:
+        for record, sudo_record in zip(records, records.sudo()):
             # bypass access rights check when traversing the related path
-            value = record.sudo() if record.id else record
+            value = sudo_record if record.id else record
             # traverse the intermediate fields, and keep at most one record
             for name in self.related[:-1]:
                 value = value[name][:1]