diff --git a/addons/web/static/src/legacy/js/views/basic/basic_model.js b/addons/web/static/src/legacy/js/views/basic/basic_model.js index 53a2d156c56..dc6856fa50c 100644 --- a/addons/web/static/src/legacy/js/views/basic/basic_model.js +++ b/addons/web/static/src/legacy/js/views/basic/basic_model.js @@ -1505,11 +1505,11 @@ var BasicModel = AbstractModel.extend({ var makeDefaultRecords = []; if (additionalContexts){ _.each(additionalContexts, function (context) { - params.context = self._getContext(list, {additionalContext: context}); + params.context = self._getContext(list, {additionalContext: context, sanitize_default_values: true}); makeDefaultRecords.push(self._makeDefaultRecord(list.model, params)); }); } else { - params.context = self._getContext(list); + params.context = self._getContext(list, {sanitize_default_values: true}); makeDefaultRecords.push(self._makeDefaultRecord(list.model, params)); } @@ -3489,7 +3489,12 @@ var BasicModel = AbstractModel.extend({ context.set_eval_context(this._getEvalContext(element)); if (options.full || !(options.fieldName || options.additionalContext)) { - context.add(element.context); + var context_to_add = options.sanitize_default_values ? + _.omit(element.context, function (val, key) { + return _.str.startsWith(key, 'default_'); + }) + : element.context; + context.add(context_to_add); } if (options.fieldName) { var viewType = options.viewType || element.viewType; diff --git a/addons/web/static/tests/legacy/views/form_tests.js b/addons/web/static/tests/legacy/views/form_tests.js index 4ae3bc493a4..654e932099b 100644 --- a/addons/web/static/tests/legacy/views/form_tests.js +++ b/addons/web/static/tests/legacy/views/form_tests.js @@ -2648,6 +2648,44 @@ QUnit.module('Views', { form.destroy(); }); + QUnit.test('remove default value in subviews', async function (assert) { + assert.expect(2); + + this.data.product.onchanges = {} + this.data.product.onchanges.name = function () {}; + + var form = await createView({ + View: FormView, + model: 'partner', + data: this.data, + viewOptions: { + context: {default_state: "ab"} + }, + arch: '
', + mockRPC: function (route, args) { + if (route === "/web/dataset/call_kw/partner/onchange") { + assert.deepEqual(args.kwargs.context, { + default_state: 'ab', + }) + } + else if (route === "/web/dataset/call_kw/product/onchange") { + assert.deepEqual(args.kwargs.context, { + default_product_uom_qty: 68, + }) + } + return this._super.apply(this, arguments); + }, + }); + await testUtils.dom.click(form.$('.o_field_x2many_list_row_add a')); + form.destroy(); + }); + QUnit.test('reference field in one2many list', async function (assert) { assert.expect(1);