summaryrefslogtreecommitdiff
path: root/addons/web_editor/models/ir_ui_view.py
diff options
context:
space:
mode:
authorChristophe Simonis <chs@odoo.com>2019-01-09 15:44:05 +0000
committerChristophe Simonis <chs@odoo.com>2019-01-09 15:56:53 +0000
commit8aa8548d8ab68feb13f3bde51c557db84877e809 (patch)
tree930790c1c84a4412db777986f6b2077808560d95 /addons/web_editor/models/ir_ui_view.py
parent55a48e341580a6a400c36b6ba0d7b12ff9997f12 (diff)
parent3e4138deaa23b3631dc3fce33cd6d1b3be28ffbd (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.py20
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):