summaryrefslogtreecommitdiff
path: root/odoo/models.py
diff options
context:
space:
mode:
authorChristophe Simonis <chs@odoo.com>2019-01-18 14:26:33 +0100
committerChristophe Simonis <chs@odoo.com>2019-01-18 14:26:33 +0100
commita337b9ec92943017089ff24ea35ca592557121aa (patch)
treed8b111991257d17aa7d9325ef15bf11730b988e6 /odoo/models.py
parentf8e37d6a808a302cda973bc0c6f2b275355ef74c (diff)
parentf854e01a983334e214357b4e05083b9a96a61be7 (diff)
[MERGE] forward port branch 12.0 up to f854e01a983
Diffstat (limited to 'odoo/models.py')
-rw-r--r--odoo/models.py16
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