diff --git a/addons/web_editor/controllers/main.py b/addons/web_editor/controllers/main.py index d7acc1145d7..7f1769050a3 100644 --- a/addons/web_editor/controllers/main.py +++ b/addons/web_editor/controllers/main.py @@ -380,7 +380,7 @@ class Web_Editor(http.Controller): dict: views, scss, js """ # Related views must be fetched if the user wants the views and/or the style - views = request.env["ir.ui.view"].get_related_views(key, bundles=bundles) + views = request.env["ir.ui.view"].with_context(no_primary_children=True, __views_get_original_hierarchy=[]).get_related_views(key, bundles=bundles) views = views.read(['name', 'id', 'key', 'xml_id', 'arch', 'active', 'inherit_id']) scss_files_data_by_bundle = [] diff --git a/addons/web_editor/models/ir_ui_view.py b/addons/web_editor/models/ir_ui_view.py index f1627a1ac8e..3568123a31f 100644 --- a/addons/web_editor/models/ir_ui_view.py +++ b/addons/web_editor/models/ir_ui_view.py @@ -207,6 +207,9 @@ class IrUiView(models.Model): @api.model def _view_get_inherited_children(self, view): + if self._context.get('no_primary_children', False): + original_hierarchy = self._context.get('__views_get_original_hierarchy', []) + return view.inherit_children_ids.filtered(lambda extension: extension.mode != 'primary' or extension.id in original_hierarchy) return view.inherit_children_ids @api.model @@ -225,7 +228,7 @@ class IrUiView(models.Model): @api.model def _views_get(self, view_id, get_children=True, bundles=False, root=True, visited=None): """ For a given view ``view_id``, should return: - * the view itself + * the view itself (starting from its top most parent) * all views inheriting from it, enabled or not - but not the optional children of a non-enabled child * all views called from it (via t-call) @@ -239,7 +242,9 @@ class IrUiView(models.Model): if visited is None: visited = [] + original_hierarchy = self._context.get('__views_get_original_hierarchy', []) while root and view.inherit_id: + original_hierarchy.append(view.id) view = view.inherit_id views_to_return = view