summaryrefslogtreecommitdiff
path: root/odoo/fields.py
diff options
context:
space:
mode:
authorChristophe Simonis <chs@odoo.com>2019-02-20 13:40:48 +0100
committerChristophe Simonis <chs@odoo.com>2019-02-20 13:40:48 +0100
commitf1ff55bca1242af86cd5feedbf7c4793b96174a1 (patch)
tree164453a9cf678e004c2ae82819c51fbd57c0b6ae /odoo/fields.py
parent716a272480e649db721c081605368e1bccf8dc91 (diff)
parentde8cefcef4d456398e5028c52e3bd9db807e5f8a (diff)
[MERGE] forward port branch 11.0 up to de8cefcef4d
Diffstat (limited to 'odoo/fields.py')
-rw-r--r--odoo/fields.py16
1 files changed, 12 insertions, 4 deletions
diff --git a/odoo/fields.py b/odoo/fields.py
index 4a41b4c4915..35b2892d447 100644
--- a/odoo/fields.py
+++ b/odoo/fields.py
@@ -2025,7 +2025,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:
@@ -2141,7 +2142,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
@@ -2575,9 +2577,15 @@ class Id(Field):
def __get__(self, record, owner):
if record is None:
return self # the field is accessed through the class owner
- if not record:
+
+ # the code below is written to make record.id as quick as possible
+ ids = record._ids
+ size = len(ids)
+ if size is 0:
return False
- return record.ensure_one()._ids[0]
+ elif size is 1:
+ return ids[0]
+ raise ValueError("Expected singleton: %s" % record)
def __set__(self, record, value):
raise TypeError("field 'id' cannot be assigned")