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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 02:25:14