summaryrefslogtreecommitdiff
path: root/addons/base_sparse_field/models/fields.py
diff options
context:
space:
mode:
authorRaphael Collet <rco@odoo.com>2019-08-14 07:35:49 +0000
committerDenis Ledoux <dle@odoo.com>2019-08-20 12:43:59 +0000
commit9920f20e4c7753bc17bea71dea3a90f7de687196 (patch)
tree6a3d0258c10a8ccb1d85949ddafdeb070de78121 /addons/base_sparse_field/models/fields.py
parente28d3aa4d3851d72deba08c236072d002f83216a (diff)
[IMP] models: ORM speedup
This branch is the combination of several optimizations in the ORM: * store field values once in the cache: the cache reflects more faithfully the database, only fields that explicitly depend on the context have an extra indirection in the cache; * delay recomputations by default: use method `recompute` to explicitly flush out pending recomputations; * delay updates in method `write`: updates are stored in a data structure that can be flushed efficiently to the database with method `flush` (which also flush out recomputations); * make method `modified` take advantage of inverse fields to inverse dependencies; * filter records by evaluating a domain on records in Python; * a computed field with `readonly=False` behaves like a normal field with an onchange method; * computed fields are computed in superuser mode by default. Work done by Toufik Ben Jaa, Raphael Collet, Denis Ledoux and Fabien Pinckaers. closes odoo/odoo#35659 Signed-off-by: Denis Ledoux <beledouxdenis@users.noreply.github.com>
Diffstat (limited to 'addons/base_sparse_field/models/fields.py')
-rw-r--r--addons/base_sparse_field/models/fields.py11
1 files changed, 7 insertions, 4 deletions
diff --git a/addons/base_sparse_field/models/fields.py b/addons/base_sparse_field/models/fields.py
index 131598f934c..199bc9c3494 100644
--- a/addons/base_sparse_field/models/fields.py
+++ b/addons/base_sparse_field/models/fields.py
@@ -82,11 +82,14 @@ class Serialized(fields.Field):
column_type = ('text', 'text')
def convert_to_column(self, value, record, values=None, validate=True):
- return json.dumps(value)
+ return self.convert_to_cache(value, record, validate=validate)
def convert_to_cache(self, value, record, validate=True):
- # cache format: dict
- value = value or {}
- return value if isinstance(value, dict) else json.loads(value)
+ # cache format: json.dumps(value) or None
+ return json.dumps(value) if isinstance(value, dict) else (value or None)
+
+ def convert_to_record(self, value, record):
+ return json.loads(value or "{}")
+
fields.Serialized = Serialized