diff --git a/addons/web/static/src/views/view_button/view_button_hook.js b/addons/web/static/src/views/view_button/view_button_hook.js index a9f116a84f5..8281180c562 100644 --- a/addons/web/static/src/views/view_button/view_button_hook.js +++ b/addons/web/static/src/views/view_button/view_button_hook.js @@ -71,8 +71,7 @@ export function useViewButtons(model, ref, options = {}) { let buttonContext = {}; if (clickParams.context) { if (typeof clickParams.context === "string") { - const valuesForEval = Object.assign({}, params.evalContext); - buttonContext = evaluateExpr(clickParams.context, valuesForEval); + buttonContext = evaluateExpr(clickParams.context, params.evalContext); } else { buttonContext = clickParams.context; } diff --git a/addons/web/static/tests/views/fields/one2many_field_tests.js b/addons/web/static/tests/views/fields/one2many_field_tests.js index 68dc86c7dd6..981c8b1ae50 100644 --- a/addons/web/static/tests/views/fields/one2many_field_tests.js +++ b/addons/web/static/tests/views/fields/one2many_field_tests.js @@ -9018,6 +9018,33 @@ QUnit.module("Fields", (hooks) => { assert.verifySteps(["do_something"]); }); + QUnit.test("o2m button with parent in context", async function (assert) { + await makeView({ + type: "form", + resModel: "partner", + serverData, + resId: 1, + arch: ` +
`, + mockRPC(route, args) { + if (args.method === "test_button") { + assert.step("test_button"); + assert.strictEqual(args.kwargs.context.parent_name, 'first record'); + return true; + } + }, + }); + await click(target, 'button[name="test_button"]'); + assert.verifySteps(["test_button"]); + }); + QUnit.test("o2m add a line custom control create align with handle", async function (assert) { await makeView({ type: "form",