diff --git a/addons/web/static/src/views/kanban/kanban_compiler.js b/addons/web/static/src/views/kanban/kanban_compiler.js index 1baaed77ac0..2005476503f 100644 --- a/addons/web/static/src/views/kanban/kanban_compiler.js +++ b/addons/web/static/src/views/kanban/kanban_compiler.js @@ -280,6 +280,8 @@ export class KanbanCompiler extends ViewCompiler { compiled = createElement("span", { "t-esc": `record["${fieldName}"].value` }); } else { compiled = super.compileField(el, params); + const fieldId = el.getAttribute("field_id") || el.getAttribute("name"); + compiled.setAttribute("id", `'${fieldId}_' + props.record.id`); } const { bold, display } = extractAttributes(el, ["bold", "display"]); diff --git a/addons/web/static/tests/views/kanban_view_tests.js b/addons/web/static/tests/views/kanban_view_tests.js index e875685517f..f03ff6fae02 100644 --- a/addons/web/static/tests/views/kanban_view_tests.js +++ b/addons/web/static/tests/views/kanban_view_tests.js @@ -8936,6 +8936,29 @@ QUnit.module("Views", (hooks) => { assert.containsOnce(getCard(0), "div.o_field_boolean .custom-checkbox"); }); + QUnit.test("kanban view with boolean toggle widget", async (assert) => { + await makeView({ + type: "kanban", + resModel: "partner", + serverData, + arch: ` + + + +
+
+
+
+ `, + }); + assert.ok(getCard(0).querySelector("[name='bar'] input").checked); + assert.ok(getCard(1).querySelector("[name='bar'] input").checked); + + await click(getCard(1), "[name='bar'] label"); + assert.ok(getCard(0).querySelector("[name='bar'] input").checked); + assert.notOk(getCard(1).querySelector("[name='bar'] input").checked); + }); + QUnit.test("kanban view with monetary and currency fields without widget", async (assert) => { const currencies = {}; for (const record of serverData.models.currency.records) {