diff options
| author | Christophe Simonis <chs@odoo.com> | 2019-02-20 13:40:48 +0100 |
|---|---|---|
| committer | Christophe Simonis <chs@odoo.com> | 2019-02-20 13:40:48 +0100 |
| commit | f1ff55bca1242af86cd5feedbf7c4793b96174a1 (patch) | |
| tree | 164453a9cf678e004c2ae82819c51fbd57c0b6ae /odoo/fields.py | |
| parent | 716a272480e649db721c081605368e1bccf8dc91 (diff) | |
| parent | de8cefcef4d456398e5028c52e3bd9db807e5f8a (diff) | |
[MERGE] forward port branch 11.0 up to de8cefcef4d
Diffstat (limited to 'odoo/fields.py')
| -rw-r--r-- | odoo/fields.py | 16 |
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") |
