Odoo中OneToMany字段如何正确关联两模型?res.sector无反向字段报错怎么解决?
报错原因
该报错是由于OneToMany字段定义时未正确指定必填的inverse_name参数导致的。Odoo中OneToMany属于非存储型的关联字段,必须依赖关联模型(本次报错指向res.sector)中的反向Many2one字段完成关联映射,没有指定合法的反向字段时就会触发该错误。
OneToMany 关联的正确实现方式
以两个模型的关联为例:主模型为res.partner,需要关联多个res.sector记录,实现逻辑如下:
- 首先在关联模型
res.sector中定义反向关联的Many2one字段
from odoo import models, fields class ResSector(models.Model): _name = 'res.sector' _description = '行业信息' # 定义指向主模型的Many2one字段,字段名后续会作为主模型OneToMany的inverse_name参数 partner_id = fields.Many2one(comodel_name='res.partner', string='所属客户') # 其他业务字段省略
- 在主模型中定义
OneToMany字段,填入正确的inverse_name参数
class ResPartner(models.Model): _inherit = 'res.partner' # inverse_name必须填写为res.sector中指向当前模型的Many2one字段名 sector_ids = fields.One2many(comodel_name='res.sector', inverse_name='partner_id', string='关联行业')
现有报错的修复步骤
- 检查你定义
OneToMany字段的代码,确认inverse_name参数未留空,且参数值拼写正确 - 确认
comodel_name指定的模型中,确实存在对应名称的Many2one字段,且该字段的关联对象是当前定义OneToMany的模型 - 代码修改完成后升级对应模块、重启Odoo服务即可生效
内容的提问来源于stack exchange,提问作者Houssem Chouia
相关产品推荐
相关产品推荐

