diff --git a/addons/web/static/src/js/views/basic/basic_model.js b/addons/web/static/src/js/views/basic/basic_model.js index 2524ff2ab02..b8211b2f048 100644 --- a/addons/web/static/src/js/views/basic/basic_model.js +++ b/addons/web/static/src/js/views/basic/basic_model.js @@ -1779,7 +1779,8 @@ var BasicModel = AbstractModel.extend({ } else { var fieldInfo = record.fieldsInfo[viewType][name]; if (!fieldInfo) { - return; // ignore changes of x2many not in view + // ignore changes of x2many not in view + continue; } var view = fieldInfo.views && fieldInfo.views[fieldInfo.mode]; list = self._makeDataPoint({ diff --git a/addons/web/static/tests/views/basic_model_tests.js b/addons/web/static/tests/views/basic_model_tests.js index 909cdfaa905..dd802790210 100644 --- a/addons/web/static/tests/views/basic_model_tests.js +++ b/addons/web/static/tests/views/basic_model_tests.js @@ -127,6 +127,42 @@ odoo.define('web.basic_model_tests', function (require) { form.destroy(); }); + QUnit.test('can process x2many commands (with multiple fields)', async function (assert) { + assert.expect(1); + + this.data.partner.fields.product_ids.default = [[0, 0, { category: [] }]]; + + const form = await createView({ + View: FormView, + model: 'partner', + data: this.data, + arch: ` +
+ + + `, + archs: { + 'product,false,list': ` + + + + + `, + }, + mockRPC(route, args) { + if (args.method === "create") { + const product_ids = args.args[0].product_ids; + const values = product_ids[0][2]; + assert.strictEqual(values.active, true, "active field should be set"); + } + return this._super.apply(this, arguments); + }, + }); + + await testUtils.form.clickSave(form); + form.destroy(); + }); + QUnit.test('can load a record', async function (assert) { assert.expect(7);