Odoo C#连接器无法找到关联表res_partner_res_partner_category_rel问题
Odoo RPC 操作多对多中间表问题及模型名获取方法
问题原因
你遇到的核心问题是:res_partner_res_partner_category_rel是Odoo自动生成的多对多关联中间表,这类表没有对应的ORM模型(Model),而Odoo的RPC接口是基于模型而非直接数据库表设计的。你按照“下划线转点”的规则生成的res.partner.res.partner.category.rel并不是一个合法的Odoo模型名,自然会被提示不存在。
Odoo中,多对多关联的数据是通过主模型的对应字段来操作的,比如res.partner模型里的category_id字段就是关联res.partner.category的多对多字段,所有和这个关联相关的读写操作都应该通过该字段完成,而非直接操作中间表。
获取Odoo所有合法模型调用名称的方法
1. 通过Odoo后台开发者模式查看
- 开启开发者模式(设置 → 激活开发者模式)
- 进入设置 → 技术 → 数据库结构 → 模型,列表中每条记录的「模型」字段值就是可用于RPC调用的合法名称(比如
res.partner、res.partner.category)。
2. 通过RPC接口查询所有模型
直接调用ir.model模型的search_read方法,获取所有已注册的模型名,示例C#代码如下:
// 调用Odoo RPC接口查询所有模型 var models = odooClient.SearchRead("ir.model", new object[] { }, new string[] { "model" }); // 遍历输出所有模型名 foreach (var model in models) { Console.WriteLine(model["model"].ToString()); }
3. 查看Odoo源码中的模型定义
每个模块的models目录下的Python文件中,模型类的_name属性值就是该模型的调用名称,比如res.partner的定义:
class ResPartner(models.Model): _name = 'res.partner' # ... 其他字段定义
解决当前多对多关联操作的建议
不要尝试直接操作中间表,而是通过主模型的多对多字段处理:
- 添加关联:更新
res.partner模型的category_id字段,传入要关联的分类ID列表(用(6, 0, [ids])格式表示替换关联,或用(4, id)添加单个关联)。 - 查询关联:读取
res.partner记录的category_id字段,即可获取对应的分类数据。 - 移除关联:使用
(3, id)或(5, 0)格式更新category_id字段来移除关联。
内容的提问来源于stack exchange,提问作者5ORBEX
相关产品推荐
相关产品推荐

