diff options
Diffstat (limited to 'odoo/models.py')
| -rw-r--r-- | odoo/models.py | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/odoo/models.py b/odoo/models.py index eca249f6200..9104406195b 100644 --- a/odoo/models.py +++ b/odoo/models.py @@ -2778,14 +2778,16 @@ class BaseModel(MetaModel('DummyModel', (object,), {'_register': False})): # retrieve results from records; this takes values from the cache and # computes remaining fields + self = self.with_prefetch(self._prefetch.copy()) data = {record: {'id': record.id} for record in self} missing = set() use_name_get = (load == '_classic_read') for name in (stored + inherited + computed): convert = self._fields[name].convert_to_read - # read every field with prefetching limited to self; this avoids + # restrict the prefetching of self's model to self; this avoids # computing fields on a larger recordset than self - for record in self.with_prefetch(): + self._prefetch[self._name] = set(self._ids) + for record in self: try: data[record][name] = convert(record[name], record, use_name_get) except MissingError: @@ -3738,6 +3740,12 @@ class BaseModel(MetaModel('DummyModel', (object,), {'_register': False})): modified_ids = {row[0] for row in cr.fetchall()} self.browse(modified_ids).modified(['parent_path']) + def _load_records_write(self, values): + self.write(values) + + def _load_records_create(self, values): + return self.create(values) + def _load_records(self, data_list, update=False): """ Create or update records of this model, and assign XMLIDs. @@ -3795,7 +3803,7 @@ class BaseModel(MetaModel('DummyModel', (object,), {'_register': False})): # update existing records for data in to_update: - data['record'].write(data['values']) + data['record']._load_records_write(data['values']) # determine existing parents for new records for parent_model, parent_field in self._inherits.items(): @@ -3822,7 +3830,7 @@ class BaseModel(MetaModel('DummyModel', (object,), {'_register': False})): _logger.warning("Creating record %s in module %s.", data['xml_id'], module) # create records - records = self.create([data['values'] for data in to_create]) + records = self._load_records_create([data['values'] for data in to_create]) for data, record in zip(to_create, records): data['record'] = record |
