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 4630ba82191..8c6b6308609 100644 --- a/addons/web/static/src/js/views/basic/basic_model.js +++ b/addons/web/static/src/js/views/basic/basic_model.js @@ -2567,7 +2567,7 @@ var BasicModel = AbstractModel.extend({ count: ids.length, context: record.context, fieldsInfo: fieldsInfo, - fields: view ? view.viewFields : fieldInfo.relatedFields, + fields: view ? view.fields : fieldInfo.relatedFields, limit: fieldInfo.limit, modelName: field.relation, res_ids: ids, diff --git a/addons/web/static/src/js/views/form/form_view.js b/addons/web/static/src/js/views/form/form_view.js index d8693586590..7de0f71e997 100644 --- a/addons/web/static/src/js/views/form/form_view.js +++ b/addons/web/static/src/js/views/form/form_view.js @@ -100,6 +100,7 @@ var FormView = BasicView.extend({ for (var viewName in views) { // clone to make runbot green? attrs.views[viewName] = self._processFieldsView(views[viewName], viewName); + attrs.views[viewName].fields = attrs.views[viewName].viewFields; } self._setSubViewLimit(attrs); })); diff --git a/addons/web/static/tests/fields/relational_fields_tests.js b/addons/web/static/tests/fields/relational_fields_tests.js index f7ab9394ebe..0d8e5dc56d4 100644 --- a/addons/web/static/tests/fields/relational_fields_tests.js +++ b/addons/web/static/tests/fields/relational_fields_tests.js @@ -9275,7 +9275,7 @@ QUnit.module('relational_fields', { form.destroy(); }); - QUnit.test('onchange in a one2Many, but not in main record, with non inline view', function (assert) { + QUnit.test('onchange in a one2many with non inline view on an existing record', function (assert) { assert.expect(6); this.data.partner.fields.sequence = {string: 'Sequence', type: 'integer'}; @@ -9312,6 +9312,53 @@ QUnit.module('relational_fields', { form.destroy(); }); + QUnit.test('onchange in a one2many with non inline view on a new record', function (assert) { + assert.expect(8); + + this.data.turtle.onchanges = { + display_name: function (obj) { + if (obj.display_name) { + obj.turtle_int = 44; + } + }, + }; + + var form = createView({ + View: FormView, + model: 'partner', + data: this.data, + arch: '
', + archs: { + 'turtle,false,list': '' + + '' + + '' + + '', + }, + mockRPC: function (route, args) { + assert.step(args.method || route); + return this._super.apply(this, arguments); + }, + }); + + // add a row and trigger the onchange + form.$('.o_field_x2many_list_row_add a').click(); + form.$('.o_data_row .o_field_widget[name=display_name]').val('a name').trigger('input'); + + assert.strictEqual(form.$('.o_data_row .o_field_widget[name=turtle_int]').val(), "44", + "should have triggered the onchange"); + + assert.verifySteps([ + 'load_views', // load sub list + 'default_get', // main record + 'onchange', // main record + 'default_get', // sub record + 'onchange', // sub record + 'onchange', // edition of display_name of sub record + ]); + + form.destroy(); + }); + QUnit.test('add a line, edit it and "Save & New"', function (assert) { assert.expect(5);