[FIX] field: avoid overhead of record._set_dirty when setting fields (#21378)
Setting fields as dirty was dramatically slow for huge one2many fields.
This commit is contained in:
committed by
Raphael Collet
parent
d82b360309
commit
7a24a2f45f
+3
-3
@@ -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
|
||||
|
||||
############################################################################
|
||||
#
|
||||
|
||||
Reference in New Issue
Block a user