From 681ff1aec11d7c74699ebea8604bdce69d60737f Mon Sep 17 00:00:00 2001 From: Denis Ledoux Date: Mon, 4 Feb 2019 14:02:54 +0000 Subject: [PATCH] [IMP] fields: faster convert_to_record for many2one fields Use `env.registry` instead of `env` to get the comodel as a class instead of an instance, which saves one call to `_browse` each time we access a relational field. This saves time because of the cost of `object.__new__` and prefetch update in `_browse`. --- odoo/fields.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/odoo/fields.py b/odoo/fields.py index 271e779c47c..24683bbd0c8 100644 --- a/odoo/fields.py +++ b/odoo/fields.py @@ -1978,7 +1978,8 @@ class Many2one(_Relational): return () def convert_to_record(self, value, record): - return record.env[self.comodel_name]._browse(value, record.env, record._prefetch) + # use registry to avoid creating a recordset for the model + return record.env.registry[self.comodel_name]._browse(value, record.env, record._prefetch) def convert_to_read(self, value, record, use_name_get=True): if use_name_get and value: @@ -2094,7 +2095,8 @@ class _RelationalMulti(_Relational): raise ValueError("Wrong value for %s: %s" % (self, value)) def convert_to_record(self, value, record): - return record.env[self.comodel_name]._browse(value, record.env, record._prefetch) + # use registry to avoid creating a recordset for the model + return record.env.registry[self.comodel_name]._browse(value, record.env, record._prefetch) def convert_to_read(self, value, record, use_name_get=True): return value.ids