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) {