diff --git a/openerp/fields.py b/openerp/fields.py index 3133227f758..94e15f1bac9 100644 --- a/openerp/fields.py +++ b/openerp/fields.py @@ -1713,12 +1713,15 @@ class _RelationalMulti(_Relational): def _compute_related(self, records): """ Compute the related field ``self`` on ``records``. """ - for record in records: - value = record - # traverse the intermediate fields, and keep at most one record - for name in self.related[:-1]: - value = value[name][:1] - record[self.name] = value[self.related[-1]] + super(_RelationalMulti, self)._compute_related(records) + if self.related_sudo: + # determine which records in the relation are actually accessible + target = records.mapped(self.name) + target_ids = set(target.search([('id', 'in', target.ids)]).ids) + accessible = lambda target: target.id in target_ids + # filter values to keep the accessible records only + for record in records: + record[self.name] = record[self.name].filtered(accessible) class One2many(_RelationalMulti):