summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicolas Martinelli <nim-odoo@users.noreply.github.com>2017-12-12 13:36:23 +0100
committerRaphael Collet <rco@odoo.com>2017-12-12 13:36:23 +0100
commit7a24a2f45f1d627f2f5978cda7e2fadbe41226e5 (patch)
tree8249d47d54940606085c03a5032aa573f31de81e
parentd82b360309b7a3c5726bbffb2ac008aeffeb2197 (diff)
[FIX] field: avoid overhead of record._set_dirty when setting fields (#21378)
Setting fields as dirty was dramatically slow for huge one2many fields.
-rw-r--r--openerp/fields.py6
1 files changed, 3 insertions, 3 deletions
diff --git a/openerp/fields.py b/openerp/fields.py
index 4b2b5e443b5..c96eb7dacaa 100644
--- a/openerp/fields.py
+++ b/openerp/fields.py
@@ -851,11 +851,11 @@ class Field(object):
spec = self.modified_draft(record)
# set value in cache, inverse field, and mark record as dirty
- record._cache[self] = value
+ env.cache[self][record.id] = value
if env.in_onchange:
for invf in record._field_inverses[self]:
invf._update(value, record)
- record._set_dirty(self.name)
+ env.dirty[record].add(self.name)
# determine more dependent fields, and invalidate them
if self.relational:
@@ -867,7 +867,7 @@ class Field(object):
record.write({self.name: self.convert_to_write(value)})
# Update the cache unless value contains a new record
if all(getattr(value, '_ids', ())):
- record._cache[self] = value
+ env.cache[self][record.id] = value
############################################################################
#