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

Odoo 14:从其他模型为res.product创建外部标识符问题

Odoo中res.product外部标识符生成不一致的问题解决

你的代码和Odoo导出数据时生成的外部标识符不一致,核心问题在于处理重复命名时的逻辑错误,以下是修正方案:

问题分析

Odoo导出数据生成外部标识符的规则是:

  • 基础格式:{模型数据库表名}_{记录ID},对应__export__模块下的name字段
  • 当存在重复时,会在末尾添加递增的后缀,格式变为{模型数据库表名}_{记录ID}_{后缀数字}

你的代码在处理重复时,错误地将记录ID硬编码为21,导致生成的名称和导出逻辑不符。

修正后的代码

collections = self.env['res.product'].search([('categ', '=', 'nuts')])
if collections:
    ir_model_data = self.sudo().env['ir.model.data']
    for col in collections:
        postfix = 0
        name = f"{col._table}_{col.id}"
        # 用search_count提升性能,无需加载整条记录
        while ir_model_data.search_count([('module', '=', '__export__'), ('name', '=', name)]):
            postfix += 1
            name = f"{col._table}_{col.id}_{postfix}"
        ir_model_data.create({
            'model': 'res.product',
            'res_id': col.id,
            'module': '__export__',
            'name': name,
        })

关键修改点

  • 移除了重复处理时的硬编码21,改为使用原记录的col.id,对齐Odoo导出的命名逻辑
  • 将ir_model_data.search替换为search_count,仅判断存在性,提升代码性能
  • 使用f-string简化字符串拼接,提高可读性
  • 将ir_model_data的实例化移到循环外,避免重复创建环境对象

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 10:15:27