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

Odoo17 Racing Teams模块Many2many字段员工层级独立设置问题

解决员工在不同Racing Teams中拥有独立层级的问题

问题根源在于你把tier_id定义为hr.employee的全局字段,导致员工的层级是统一的、跨团队共享的。要实现不同团队的独立层级,必须将层级信息存储在多对多关系的中间关联表中,而非员工模型本身。

步骤1:创建自定义中间关联模型

这个模型将存储团队、员工以及对应的层级信息,替代Odoo自动生成的默认关联表:

class RacingTeamsEmployeeRel(models.Model):
    _name = 'racing.teams.employee.rel'
    _description = 'Racing Teams & Employee Relation'

    team_id = fields.Many2one('racing.teams', string='Team', required=True, ondelete='cascade')
    employee_id = fields.Many2one('hr.employee', string='Employee', required=True, ondelete='cascade')
    tier_id = fields.Many2one('helpdesk.tier', string='Tier', required=True, ondelete='cascade')

    # 添加唯一约束,避免同一员工重复加入同一团队
    _sql_constraints = [
        ('team_employee_unique', 'unique(team_id, employee_id)', '员工不能重复加入同一团队!'),
    ]

步骤2:修改Racing Teams模型的多对多字段

更新employee_ids字段,指定使用上面创建的中间模型来关联员工:

class RacingTeams(models.Model):
    _name = "racing.teams"
    _description = "Racing Teams"
    _rec_name = 'name'

    name = fields.Char(string="Name", tracking=True)
    desc = fields.Char(string="Description", tracking=True)
    employee_ids = fields.Many2many(
        comodel_name='hr.employee',
        through='racing.teams.employee.rel',  # 指定中间模型
        column1='team_id',  # 中间表中关联当前模型的字段
        column2='employee_id',  # 中间表中关联员工模型的字段
        string='Employees',
    )

步骤3:调整XML视图,编辑中间表字段

修改视图,将tree视图的模型指定为中间关联模型,这样就能直接编辑每个员工在当前团队的层级:

<notebook>
   <page string="Team Member" name="team_member">
       <field name="employee_ids" required="1">
          <tree editable="top" model="racing.teams.employee.rel">
               <field name="employee_id"/>
               <field name="tier_id"/>                           
          </tree>
        </field>
   </page>
</notebook>

步骤4:清理员工模型的全局层级字段

删除hr.employee继承模型中的tier_id字段,因为层级信息不再是员工的全局属性:

class HelpdeskHR(models.Model):
    _inherit = "hr.employee"

    name = fields.Char(string="Employee Name", related='resource_id.name', store=True, readonly=False, tracking=False)
    # 移除原有的tier_id字段

原理说明

通过将层级字段移到多对多的中间关联表,每个「团队-员工」的组合都拥有独立的层级记录,修改某团队中员工的层级只会影响该关联记录,不会改变员工在其他团队的层级设置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 21:57:23