diff --git a/addons/web/static/src/model/relational_model/utils.js b/addons/web/static/src/model/relational_model/utils.js index 0b5926f2e62..c64ce138c35 100644 --- a/addons/web/static/src/model/relational_model/utils.js +++ b/addons/web/static/src/model/relational_model/utils.js @@ -285,8 +285,11 @@ export function getFieldsSpec( properties.push(fieldName); } // M2O - if (fields[fieldName].type === "many2one" && invisible !== true) { - fieldsSpec[fieldName].fields = { display_name: {} }; + if (fields[fieldName].type === "many2one") { + fieldsSpec[fieldName].fields = {}; + if (invisible !== true) { + fieldsSpec[fieldName].fields.display_name = {}; + } } if (["many2one", "one2many", "many2many"].includes(fields[fieldName].type)) { let context = activeFields[fieldName].context; @@ -367,12 +370,9 @@ export function parseServerValue(field, value) { } case "many2one": { if (Array.isArray(value)) { + // Used for web_read_group, where the value is an array of [id, display_name] return value; } - if (Number.isInteger(value)) { - // for always invisible many2ones, unity directly returns the id, not a pair - return [value, ""]; - } return value ? [value.id, value.display_name] : false; } case "properties": { diff --git a/addons/web/static/tests/helpers/mock_server.js b/addons/web/static/tests/helpers/mock_server.js index c497b882504..3e23c11f261 100644 --- a/addons/web/static/tests/helpers/mock_server.js +++ b/addons/web/static/tests/helpers/mock_server.js @@ -2547,10 +2547,14 @@ export class MockServer { case "many2one": { for (const record of records) { if (record[fieldName] !== false) { - const displayName = record[fieldName][1]; - record[fieldName] = { id: record[fieldName][0] }; - if (relatedFields && relatedFields.display_name) { - record[fieldName].display_name = displayName; + if (!relatedFields) { + record[fieldName] = record[fieldName][0]; + } else { + const displayName = record[fieldName][1]; + record[fieldName] = { id: record[fieldName][0] }; + if ("display_name" in relatedFields) { + record[fieldName].display_name = displayName; + } } } }