You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Odoo 15中Many2one字段显示x.y 1而非关联表值的问题排查

Odoo Many2one字段显示默认标识而非自定义字段的解决方法

问题描述

在Z.X模型的parent_id(关联x.y模型的Many2one字段)中,实际显示的是x.y 1、x.y 2这类默认标识,而非x.y模型中存储的患者姓名(pat_fullname字段值)。

原因分析

Odoo中Many2one字段的显示内容由关联模型的显示名称规则决定:

  • 默认情况下,系统会优先查找模型中的name字段作为显示值;
  • 如果模型没有定义name字段,就会自动生成模型标识 + 记录序号的格式(比如x.y 1)。

你的x.y模型仅定义了pat_fullname和pat_age字段,没有name字段,也未指定自定义显示字段,因此触发了默认规则。

解决方案

有两种简单的方式解决这个问题,任选其一即可:

方案1:指定默认显示字段(推荐)

在x.y模型中添加_rec_name属性,直接指定用pat_fullname作为该模型记录的显示名称:

from odoo import fields, models, api, _

class XY(models.Model):
    _name = 'x.y'
    _rec_name = 'pat_fullname'  # 新增此行,指定显示字段
    pat_fullname = fields.Char(string='Full Name')
    pat_age = fields.Integer(string='Age')

方案2:自定义显示名称(支持组合字段)

如果需要显示更复杂的内容(比如姓名+年龄),可以重写模型的name_get()方法:

from odoo import fields, models, api, _

class XY(models.Model):
    _name = 'x.y'
    pat_fullname = fields.Char(string='Full Name')
    pat_age = fields.Integer(string='Age')

    @api.depends('pat_fullname', 'pat_age')
    def name_get(self):
        result = []
        for rec in self:
            # 自定义显示格式,比如姓名+年龄
            display_name = f"{rec.pat_fullname} ({rec.pat_age}岁)" if rec.pat_age else rec.pat_fullname
            result.append((rec.id, display_name))
        return result

生效步骤

修改代码后,需要:

  1. 升级对应的Odoo模块;
  2. 刷新页面,此时Z.X模型的parent_id字段就会显示指定的自定义内容。

内容的提问来源于stack exchange,提问作者Zoro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 22:05:45