diff --git a/sao/src/model.js b/sao/src/model.js index bd6fa05256..be8db1f3a3 100644 --- a/sao/src/model.js +++ b/sao/src/model.js @@ -2159,7 +2159,15 @@ group.load(value, modified || default_); } else { for (const vals of value) { - var new_record = group.new_(false); + var new_record; + if ('id' in vals) { + new_record = group.get(vals.id); + if (!new_record) { + new_record = group.new_(false, vals.id); + } + } else { + new_record = group.new_(false); + } if (default_) { // Don't validate as parent will validate new_record.set_default(vals, false, false); diff --git a/tryton/tryton/gui/window/view_form/model/field.py b/tryton/tryton/gui/window/view_form/model/field.py index 85ffa57a43..bcdafb7497 100644 --- a/tryton/tryton/gui/window/view_form/model/field.py +++ b/tryton/tryton/gui/window/view_form/model/field.py @@ -689,7 +689,13 @@ class O2MField(Field): group.load(value, modified=modified or default) else: for vals in value: - new_record = record.value[self.name].new(default=False) + if 'id' in vals: + new_record = group.get(vals['id']) + if not new_record: + new_record = group.new( + default=False, obj_id=vals['id']) + else: + new_record = group.new(default=False) if default: # Don't validate as parent will validate new_record.set_default(