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 8dc540a8861..8de831ee506 100644 --- a/addons/web/static/src/js/views/basic/basic_model.js +++ b/addons/web/static/src/js/views/basic/basic_model.js @@ -4364,8 +4364,12 @@ var BasicModel = AbstractModel.extend({ var fields = view ? view.fields : fieldInfo.relatedFields; var viewType = view ? view.type : fieldInfo.viewType; + // remove default_* keys from parent context to avoid issue of same field name in x2m + var parentContext = _.omit(record.context, function (val, key) { + return _.str.startsWith(key, 'default_'); + }); var x2manyList = self._makeDataPoint({ - context: record.context, + context: parentContext, fieldsInfo: fieldsInfo, fields: fields, limit: fieldInfo.limit, diff --git a/addons/web/static/tests/fields/relational_fields/field_one2many_tests.js b/addons/web/static/tests/fields/relational_fields/field_one2many_tests.js index 4bd23d0d76b..c2801eb9ac1 100644 --- a/addons/web/static/tests/fields/relational_fields/field_one2many_tests.js +++ b/addons/web/static/tests/fields/relational_fields/field_one2many_tests.js @@ -7041,8 +7041,8 @@ QUnit.module('fields', {}, function () { form.destroy(); }); - QUnit.test('propagate context to sub views', async function (assert) { - assert.expect(5); + QUnit.test('propagate context to sub views without default_* keys', async function (assert) { + assert.expect(7); var form = await createView({ View: FormView, @@ -7060,9 +7060,23 @@ QUnit.module('fields', {}, function () { mockRPC: function (route, args) { assert.strictEqual(args.kwargs.context.flutter, 'shy', 'view context key should be used for every rpcs'); + if (args.method === 'default_get') { + if (args.model === 'partner') { + assert.strictEqual(args.kwargs.context.default_flutter, 'why', + "should have default_* values in context for form view RPCs"); + } else if (args.model === 'turtle') { + assert.notOk(args.kwargs.context.default_flutter, + "should not have default_* values in context for subview RPCs"); + } + } return this._super.apply(this, arguments); }, - viewOptions: { context: { flutter: 'shy' } }, + viewOptions: { + context: { + flutter: 'shy', + default_flutter: 'why', + }, + }, }); await testUtils.dom.click(form.$('.o_field_x2many_list_row_add a')); await testUtils.fields.editInput(form.$('input[name="turtle_foo"]'), 'pinky pie');