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

如何在Odoo的Many2many字段中显示「员工(部门)」格式

实现Odoo中many2many字段「员工姓名(部门名称)」的显示格式

核心思路

Odoo的many2many_tags组件会调用关联模型的name_get()方法生成显示文本,所以只需修改hr.employee模型的该方法,就能实现目标格式。


方法一:全局修改员工显示格式

此方法会让所有关联hr.employee的字段都显示「姓名(部门)」格式。

1. 在自定义模块的模型文件中重写name_get方法

找到你自定义模块下的Python模型文件(如hr_employee_extend.py),添加以下代码:

from odoo import models, api

class HrEmployee(models.Model):
    _inherit = 'hr.employee'

    @api.multi
    def name_get(self):
        result = []
        for employee in self:
            # 处理无部门的情况,避免空括号
            dept_name = employee.department_id.name if employee.department_id else ""
            display_text = f"{employee.name} ({dept_name})" if dept_name else employee.name
            result.append((employee.id, display_text))
        return result

2. 保留原有XML配置

你的现有XML代码无需修改,继续使用即可:

<field name="employee_ids" widget="many2many_tags" />

3. 验证效果

升级你的自定义模块后,打开对应表单,就能看到employee_ids的标签显示为「员工姓名(部门名称)」格式。


方法二:仅针对当前字段修改(不全局影响)

如果不想改变其他地方的员工显示格式,可通过上下文控制仅当前字段生效。

1. 修改XML配置,添加上下文标记

<field name="employee_ids" widget="many2many_tags" context="{'show_dept_in_name': True}" />

2. 重写name_get方法时判断上下文

from odoo import models, api

class HrEmployee(models.Model):
    _inherit = 'hr.employee'

    @api.multi
    def name_get(self):
        result = []
        # 读取上下文标记,决定是否显示部门
        show_dept = self.env.context.get('show_dept_in_name', False)
        for employee in self:
            if show_dept:
                dept_name = employee.department_id.name if employee.department_id else ""
                display_text = f"{employee.name} ({dept_name})" if dept_name else employee.name
            else:
                # 调用原生方法保持原有显示
                display_text = super(HrEmployee, employee).name_get()[0][1]
            result.append((employee.id, display_text))
        return result

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 02:27:12