diff --git a/odoo/models.py b/odoo/models.py index 0ca056286dc..66fc08fdff5 100644 --- a/odoo/models.py +++ b/odoo/models.py @@ -5108,9 +5108,16 @@ class BaseModel(MetaModel('DummyModel', (object,), {'_register': False})): if path == 'id': target0 = self else: - env = self.env(user=SUPERUSER_ID, context={'active_test': False}) - target0 = env[model_name].search([(path, 'in', self.ids)]) - target0 = target0.with_env(self.env) + Model = self.env[model_name] + f = Model._fields.get(path) + if f and f.store and f.type not in ('one2many', 'many2many'): + # path is direct (not dotted), stored, and inline -> optimise to raw sql + self.env.cr.execute("SELECT id FROM %s WHERE %s in %%s" % (Model._table, path), [tuple(self.ids)]) + target0 = Model.browse(i for [i] in self.env.cr.fetchall()) + else: + env = self.env(user=SUPERUSER_ID, context={'active_test': False}) + target0 = env[model_name].search([(path, 'in', self.ids)]) + target0 = target0.with_env(self.env) # prepare recomputation for each field on linked records for field in stored: # discard records to not recompute for field