From 03395ea103f1e933576bad2a32ae7842818e7dfd Mon Sep 17 00:00:00 2001 From: Benoit Date: Thu, 7 Jun 2018 16:56:53 +0200 Subject: [PATCH] [FIX] manual creation of serialized field from the interface --- odoo/addons/base/ir/ir_model.py | 2 ++ odoo/modules/registry.py | 6 ++++++ 2 files changed, 8 insertions(+) diff --git a/odoo/addons/base/ir/ir_model.py b/odoo/addons/base/ir/ir_model.py index 2a1eb0fad37..ec58bf422ac 100644 --- a/odoo/addons/base/ir/ir_model.py +++ b/odoo/addons/base/ir/ir_model.py @@ -695,6 +695,8 @@ class IrModelFields(models.Model): # add compute function if given if field_data['compute']: attrs['compute'] = make_compute(field_data['compute'], field_data['depends']) + if field_data.get('sparse'): + attrs['sparse'] = field_data['sparse'] return fields.Field.by_type[field_data['ttype']](**attrs) diff --git a/odoo/modules/registry.py b/odoo/modules/registry.py index 7bdff852c67..60db60cdd50 100644 --- a/odoo/modules/registry.py +++ b/odoo/modules/registry.py @@ -212,9 +212,15 @@ class Registry(Mapping): if self._fields_by_model is None: # Query manual fields for all models at once self._fields_by_model = dic = defaultdict(dict) + id2name = {} cr.execute('SELECT * FROM ir_model_fields WHERE state=%s', ('manual',)) for field in cr.dictfetchall(): dic[field['model']][field['name']] = field + id2name[field['id']] = field['name'] + # compute the attribute 'sparse' + for fields in dic.values(): + for name, field in fields.items(): + field['sparse'] = id2name.get(field['serialization_field_id']) return self._fields_by_model[model_name] def do_parent_store(self, cr):