From 747ce6adcce96a3dcfbd8f93ecce8b8c28b837b8 Mon Sep 17 00:00:00 2001 From: Raphael Collet Date: Wed, 18 Nov 2020 13:01:07 +0000 Subject: [PATCH] [FIX] core: update of custom models in registry When removing custom models from the registry, one also has to remove indirect references to those model. One such reference is the name of the custom model in its parent models' `_inherit_children`. Not removing that reference causes a crash when one of the parent models is extended: the parent model will make its children models recompute some of their attributes (see method `_build_model_attributes`). closes odoo/odoo#62008 X-original-commit: 07404bf5e93878b26468e2944c69885bbc688e57 Signed-off-by: Raphael Collet (rco) --- odoo/addons/base/models/ir_model.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/odoo/addons/base/models/ir_model.py b/odoo/addons/base/models/ir_model.py index 60e3f1efd4f..0eafd4e6cfe 100644 --- a/odoo/addons/base/models/ir_model.py +++ b/odoo/addons/base/models/ir_model.py @@ -411,9 +411,13 @@ class IrModel(models.Model): def _add_manual_models(self): """ Add extra models to the registry. """ # clean up registry first - custom_models = [name for name, model_class in self.pool.items() if model_class._custom] - for name in custom_models: - del self.pool[name] + for name, Model in list(self.pool.items()): + if Model._custom: + del self.pool.models[name] + # remove the model's name from its parents' _inherit_children + for Parent in Model.__bases__: + if hasattr(Parent, 'pool'): + Parent._inherit_children.discard(name) # add manual models cr = self.env.cr cr.execute('SELECT * FROM ir_model WHERE state=%s', ['manual'])