diff options
| author | Christophe Simonis <chs@odoo.com> | 2019-01-07 17:30:57 +0100 |
|---|---|---|
| committer | Christophe Simonis <chs@odoo.com> | 2019-01-07 17:30:57 +0100 |
| commit | e1c7fefe89438bbfc669dfec0476921145f8fd5d (patch) | |
| tree | f408ff54f0d23abb99a00206bb89b0fadcf9603b /odoo/models.py | |
| parent | 6e933e42efb8e11087db63cfb5302f37f8e8b72d (diff) | |
| parent | cdb0c08cb9a3b61466f8cdf368bac831839be8bf (diff) | |
[MERGE] forward port branch saas-14 up to cdb0c08cb9a
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 c5c10d27eff..38a25c64d86 100644 --- a/odoo/models.py +++ b/odoo/models.py @@ -2516,17 +2516,19 @@ class BaseModel(object): # 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 |
