From 4ab81c7f5e50d52e732e2a01497994f2a9b9570e Mon Sep 17 00:00:00 2001 From: std-odoo Date: Thu, 26 Jan 2023 12:48:03 +0000 Subject: [PATCH] [FIX] web: fix the Reference field in list view with a default value MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bug === If the Reference field is in a list view, and has a default value, an error is raised if we create a new record without editing the reference value. This is because the ORM return a string "model,id" in the onchange method and this value is wrongly parsed in that case. Task-2234179 closes odoo/odoo#113392 X-original-commit: b1a35d1b95612bc449b68ed38749d8b3755287ed Signed-off-by: Aaron Bohy (aab) Signed-off-by: Stéphane Debauche (std) --- .../web/static/src/views/relational_model.js | 4 ++- .../views/fields/reference_field_tests.js | 30 +++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/addons/web/static/src/views/relational_model.js b/addons/web/static/src/views/relational_model.js index ff3fcce2072..6170c951a5d 100644 --- a/addons/web/static/src/views/relational_model.js +++ b/addons/web/static/src/views/relational_model.js @@ -724,7 +724,9 @@ export class Record extends DataPoint { : false; } else if (fieldType === "reference") { const value = changes[fieldName]; - changes[fieldName] = value ? `${value.resModel},${value.resId}` : false; + changes[fieldName] = value && value.resModel && value.resId + ? `${value.resModel},${value.resId}` + : (value || false); } } diff --git a/addons/web/static/tests/views/fields/reference_field_tests.js b/addons/web/static/tests/views/fields/reference_field_tests.js index 686f404232f..7ab6a50701a 100644 --- a/addons/web/static/tests/views/fields/reference_field_tests.js +++ b/addons/web/static/tests/views/fields/reference_field_tests.js @@ -845,6 +845,36 @@ QUnit.module("Fields", (hooks) => { } ); + QUnit.test("Reference field with default value in list view", async function (assert) { + assert.expect(2); + + await makeView({ + type: "list", + resModel: "partner", + serverData, + arch: ` + + + + `, + mockRPC: (route, { method, args }) => { + if (method === "onchange") { + return { + value: {reference: "partner,2"}, + }; + } else if (method === "create") { + assert.strictEqual(args.length, 1); + assert.strictEqual(args[0][0].reference, "partner,2"); + } + }, + }); + + await click(target, '.o_list_button_add'); + await click(target, '.o_list_char[name="display_name"] input'); + await editInput(target, '.o_list_char[name="display_name"] input', "Blabla"); + await click(target, '.o_list_button_save'); + }); + QUnit.test( "ReferenceField with model_field option (tree list in form view)", async function (assert) {