diff --git a/addons/web_editor/models/ir_ui_view.py b/addons/web_editor/models/ir_ui_view.py
index edda3ba6887..0d1100a0161 100644
--- a/addons/web_editor/models/ir_ui_view.py
+++ b/addons/web_editor/models/ir_ui_view.py
@@ -10,6 +10,8 @@ from odoo import api, fields, models
_logger = logging.getLogger(__name__)
+EDITING_ATTRIBUTES = ['data-oe-model', 'data-oe-id', 'data-oe-field', 'data-oe-xpath', 'data-note-id']
+
class IrUiView(models.Model):
_inherit = 'ir.ui.view'
@@ -132,6 +134,11 @@ class IrUiView(models.Model):
# Note: after a standard edition, the tail *must not* be replaced
if replace_tail:
root.tail = replacement.tail
+ # update attributes
+ root.attrib.clear()
+ root.attrib.update(replacement.attrib)
+ for attribute in EDITING_ATTRIBUTES:
+ root.attrib.pop(attribute, None)
# replace all children
del root[:]
for child in replacement:
diff --git a/addons/website/tests/test_views.py b/addons/website/tests/test_views.py
index d99e3c84e16..81b180fb1de 100644
--- a/addons/website/tests/test_views.py
+++ b/addons/website/tests/test_views.py
@@ -221,6 +221,20 @@ class TestViewSaving(common.TransactionCase):
'text node characters wrongly unescaped when rendering'
)
+ def test_save_node_with_attr(self):
+ """ Test saving node with saved element changed attrs """
+ view = self.env['ir.ui.view'].create({
+ 'arch': u'