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
相关产品推荐
相关产品推荐

