diff options
| author | Christophe Simonis <chs@odoo.com> | 2019-01-08 17:08:48 +0100 |
|---|---|---|
| committer | Christophe Simonis <chs@odoo.com> | 2019-01-08 17:08:48 +0100 |
| commit | 3e4138deaa23b3631dc3fce33cd6d1b3be28ffbd (patch) | |
| tree | 8f8b5557363374af71baeeea97d4565a7ca1cce1 /odoo/models.py | |
| parent | 232675c49b8cabdedce98b9b9c2ccc6d963b4d9a (diff) | |
| parent | 2d824a5b7ad9e2d834bb39feb79c986eba28d6cc (diff) | |
[MERGE] forward port branch saas-11.3 up to 2d824a5b7ad
Diffstat (limited to 'odoo/models.py')
| -rw-r--r-- | odoo/models.py | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/odoo/models.py b/odoo/models.py index 8e2ad831875..d426789c757 100644 --- a/odoo/models.py +++ b/odoo/models.py @@ -2766,17 +2766,19 @@ class BaseModel(MetaModel('DummyModel', (object,), {'_register': False})): # retrieve results from records; this takes values from the cache and # computes remaining fields - result = [] - name_fields = [(name, self._fields[name]) for name in (stored + inherited + computed)] + data = {record: {'id': record.id} for record in self} + missing = set() use_name_get = (load == '_classic_read') - for record in self: - try: - values = {'id': record.id} - for name, field in name_fields: - values[name] = field.convert_to_read(record[name], record, use_name_get) - result.append(values) - except MissingError: - pass + for name in (stored + inherited + computed): + convert = self._fields[name].convert_to_read + # read every field with prefetching limited to self; this avoids + # computing fields on a larger recordset than self + for record in self.with_prefetch(): + try: + data[record][name] = convert(record[name], record, use_name_get) + except MissingError: + missing.add(record) + result = [data[record] for record in self if record not in missing] return result |
