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

Odoo V10中如何在load方法里用数据库ID关联many2one字段

解决Odoo V10中load ORM方法批量创建时关联many2one数据库ID的问题

这个问题我之前也踩过坑!Odoo V10的load方法在处理many2one关联字段时,默认会把传入的值当作名称或外部ID去匹配记录,而不是直接识别纯数字的数据库ID,这就是你直接传id无效的原因。而用名称关联时,每次都会触发name_search查询,数据量一大速度自然就慢得离谱。

正确的处理方式

要直接用数据库ID关联many2one字段,你需要把ID包装成带方括号的字符串格式,比如"[123]"这种形式。这样load方法就会识别这是数据库ID,直接关联对应的记录,不用再做额外的名称查询。

修改后的完整代码

# 从输入数据中提取分类名称列表
parent_categ_codes = [categ['name'] for categ in categ_data]
# 通过名称查询已存在的产品分类记录
parent_categ_objs = self.env['product.category'].search([('name','in',parent_categ_codes)])
# 构建名称到记录对象的映射字典
parent_dict = {categ.name: categ for categ in parent_categ_objs}

data = []
fields_name = ['name', 'parent_id']

# 组装批量创建的数据
for categ in categ_data:
    # 将父分类的数据库ID包装成带方括号的字符串
    parent_id_str = f"[{parent_dict[categ['parent_id']].id}]"
    data.append([categ['name'], parent_id_str])

# 调用load方法批量创建
self.env['product.category'].load(fields_name, data)

额外注意事项

  • 确保parent_dict中的父分类记录已经存在于数据库中,不然传入的ID会无效,导致批量创建失败;
  • 如果你用的是**外部ID(External ID)**而不是数据库ID,直接传外部ID字符串即可,不需要加方括号;
  • 这种方式能彻底避免name_search的额外查询,数据量越大,速度提升越明显。

内容的提问来源于stack exchange,提问作者Ibrar Aslam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:34:23