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

Odoo中res_users与skills模型多对多关联配置失败求助

解决Odoo中用户与技能的多对多关联问题

你的多对多关联没生效,核心是配置缺了关键参数,而且反向关联没补全。咱们一步步来修复:

1. 修正skills模型的多对多字段配置

在基于osv.osv的旧版Odoo(比如Odoo7及更早)中,many2many字段必须明确指定中间表名以及两个模型在中间表的外键字段名。你的代码只写了三个参数,缺了后两个关键项,导致Odoo无法正确生成关联结构。

修正后的skills模型代码:

class technicians_skills(osv.osv):
    _name = 'skills'
    _description = 'Technicians Skills'
    _columns = {
        'name': fields.char(string='Skill Name', size=50, required=True),
        'description': fields.text(string="Description"),
        # 补全many2many参数:关联模型、中间表名、技能侧外键、用户侧外键、显示名称
        'member_ids': fields.many2many(
            'res.users', 
            'res_users_skills_rel',  # 中间表名,建议用双模型名+_rel的规范命名
            'skill_id',  # 中间表中指向skills的外键字段
            'user_id',   # 中间表中指向res_users的外键字段
            string='Technicians'
        )
    }

2. 在res_users模型中添加反向关联字段

要在用户表单里直接看到关联的技能,得在res_users里补建反向多对多字段,注意要和skills模型用同一个中间表,并且交换外键顺序:

class res_users(osv.osv):
    _inherit = 'res.users'  # 继承原生用户模型,不要直接重定义
    _columns = {
        'skill_ids': fields.many2many(
            'skills', 
            'res_users_skills_rel',  # 和skills模型保持一致的中间表名
            'user_id',   # 对应中间表中指向res_users的外键
            'skill_id',  # 对应中间表中指向skills的外键
            string='Skills'
        )
    }

3. 收尾验证要点

  • 升级模块:修改代码后,必须在Odoo后台升级你的模块,触发数据库结构更新。
  • 权限检查:确保操作的用户组拥有skills模型的读写权限,不然可能看不到关联字段。
  • 测试关联:升级后打开技能表单,应该能通过Technicians字段添加用户;打开用户表单也能通过Skills字段关联技能,双向多对多关联就生效了。

内容的提问来源于stack exchange,提问作者Amor.o

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:18:27