diff --git a/odoo/addons/base/models/ir_ui_view.py b/odoo/addons/base/models/ir_ui_view.py index d606ad56770..5b3284de7bd 100644 --- a/odoo/addons/base/models/ir_ui_view.py +++ b/odoo/addons/base/models/ir_ui_view.py @@ -692,10 +692,10 @@ actual arch. def inherit_branding(self, specs_tree): for node in specs_tree.iterchildren(tag=etree.Element): xpath = node.getroottree().getpath(node) - if node.get('t-field'): - node.set('data-oe-xpath', xpath) + if node.tag == 'data' or node.tag == 'xpath' or node.get('position'): self.inherit_branding(node) - elif node.tag == 'data' or node.tag == 'xpath' or node.get('position'): + elif node.get('t-field'): + node.set('data-oe-xpath', xpath) self.inherit_branding(node) else: node.set('data-oe-id', str(self.id)) diff --git a/odoo/addons/base/tests/test_views.py b/odoo/addons/base/tests/test_views.py index 1633ec23dc4..77e26d75efc 100644 --- a/odoo/addons/base/tests/test_views.py +++ b/odoo/addons/base/tests/test_views.py @@ -857,6 +857,30 @@ class TestTemplating(ViewCase): '/hello[1]/world[4]', "The node's xpath position should be correct") + # Also test inherit via non-xpath t-field node, direct children of data, + # is not impacted by the feature + self.View.create({ + 'name': "Extension", + 'type': 'qweb', + 'inherit_id': view1.id, + 'arch': """ + + + + + + """ + }) + arch_string = view1.with_context(inherit_branding=True).read_combined(['arch'])['arch'] + arch = etree.fromstring(arch_string) + self.View.distribute_branding(arch) + + node = arch.xpath('//world')[1] + self.assertEqual( + node.get('t-field'), + 'z', + "The node has properly been replaced") + def test_branding_primary_inherit(self): view1 = self.View.create({ 'name': "Base view",