diff options
| author | Christophe Simonis <chs@odoo.com> | 2019-01-09 15:44:05 +0000 |
|---|---|---|
| committer | Christophe Simonis <chs@odoo.com> | 2019-01-09 15:56:53 +0000 |
| commit | 8aa8548d8ab68feb13f3bde51c557db84877e809 (patch) | |
| tree | 930790c1c84a4412db777986f6b2077808560d95 /addons/web_editor/models/ir_ui_view.py | |
| parent | 55a48e341580a6a400c36b6ba0d7b12ff9997f12 (diff) | |
| parent | 3e4138deaa23b3631dc3fce33cd6d1b3be28ffbd (diff) | |
[MERGE] forward port branch 12.0 up to 3e4138deaa2
closes odoo/odoo#30045
Diffstat (limited to 'addons/web_editor/models/ir_ui_view.py')
| -rw-r--r-- | addons/web_editor/models/ir_ui_view.py | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/addons/web_editor/models/ir_ui_view.py b/addons/web_editor/models/ir_ui_view.py index f0c295787a2..e281d9f9ecc 100644 --- a/addons/web_editor/models/ir_ui_view.py +++ b/addons/web_editor/models/ir_ui_view.py @@ -199,12 +199,21 @@ class IrUiView(models.Model): self.write({'arch': self._pretty_arch(new_arch)}) @api.model + def _view_get_inherited_children(self, view, options): + extensions = view.inherit_children_ids + if not options: + # only active children + extensions = extensions.filtered(lambda view: view.active) + return extensions + + @api.model def _view_obj(self, view_id): if isinstance(view_id, str): return self.search([('key', '=', view_id)], limit=1) or self.env.ref(view_id) elif isinstance(view_id, int): return self.browse(view_id) - # assume it's already a view object (WTF?) + # It can already be a view object when called by '_views_get()' that is calling '_view_obj' + # for it's inherit_children_ids, passing them directly as object record. return view_id # Returns all views (called and inherited) related to a view @@ -223,7 +232,7 @@ class IrUiView(models.Model): view = self._view_obj(view_id) except ValueError: _logger.warning("Could not find view object with view_id '%s'", view_id) - return [] + return self.env['ir.ui.view'] while root and view.inherit_id: view = view.inherit_id @@ -239,13 +248,10 @@ class IrUiView(models.Model): called_view = self._view_obj(child.get('t-call', child.get('t-call-assets'))) except ValueError: continue - if called_view not in views_to_return: + if called_view and called_view not in views_to_return: views_to_return += self._views_get(called_view, options=options, bundles=bundles) - extensions = view.inherit_children_ids - if not options: - # only active children - extensions = view.inherit_children_ids.filtered(lambda view: view.active) + extensions = self._view_get_inherited_children(view, options) # Keep options in a deterministic order regardless of their applicability for extension in extensions.sorted(key=lambda v: v.id): |
