diff --git a/odoo/addons/base/models/ir_model.py b/odoo/addons/base/models/ir_model.py index 37acf600cae..85bf6f97c05 100644 --- a/odoo/addons/base/models/ir_model.py +++ b/odoo/addons/base/models/ir_model.py @@ -1044,7 +1044,16 @@ class IrModelFields(models.Model): for (field_model, field_name), field_id in field_ids.items(): model = self.env[field_model] field = model._fields.get(field_name) - if field and (module == model._original_module or module in field._modules): + if field and ( + module == model._original_module + or module in field._modules + or any( + # module introduced field on model by inheritance + field_name in self.env[parent]._fields + for parent, parent_module in model._inherit_module.items() + if module == parent_module + ) + ): xml_id = field_xmlid(module, field_model, field_name) record = self.browse(field_id) data_list.append({'xml_id': xml_id, 'record': record}) diff --git a/odoo/models.py b/odoo/models.py index 0a84b260c4e..42b1344e2e4 100644 --- a/odoo/models.py +++ b/odoo/models.py @@ -514,6 +514,7 @@ class BaseModel(MetaModel('DummyModel', (object,), {'_register': False})): '_name': name, '_register': False, '_original_module': cls._module, + '_inherit_module': dict(), # map parent to introducing module '_inherit_children': OrderedSet(), # names of children models '_inherits_children': set(), # names of children models '_fields': OrderedDict(), # populated in _setup_base() @@ -532,7 +533,9 @@ class BaseModel(MetaModel('DummyModel', (object,), {'_register': False})): else: check_parent(cls, parent_class) bases.add(parent_class) + ModelClass._inherit_module[parent] = cls._module parent_class._inherit_children.add(name) + ModelClass.__bases__ = tuple(bases) # determine the attributes of the model's class