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

继承sale.order.line的create方法时触发“记录不存在”错误排查

问题排查与修复方案

核心问题根源

错误提示的sale.order.line(115,)记录不存在,本质是继承的create方法触发了递归调用:当你自动创建新订单行时,会再次调用自身的create方法,循环触发后导致ORM处理过程中出现记录引用失效的异常。

具体修复步骤

1. 新增递归跳过标记

在创建自动订单行时,通过上下文(context)传递标记,让递归进入的create方法跳过自动添加逻辑,避免无限递归:

@api.model
def create(self, vals_list):
    # 检测到跳过标记时,直接执行原生create逻辑
    if self.env.context.get('skip_auto_line'):
        return super(SaleOrderLine, self).create(vals_list)
    
    lines = super(SaleOrderLine, self).create(vals_list)
    # 提前查询配置,避免循环内重复查询
    config = self.env['res.config.settings'].search([], limit=1)
    target_product = config.specify_product_id
    
    for line in lines:
        # 仅处理服务类产品,且目标产品存在时才创建新行
        if line.product_id.type == 'service' and target_product.exists():
            # 传递跳过标记,防止递归触发
            self.with_context(skip_auto_line=True).create({
                'order_id': line.order_id.id,
                'product_id': target_product.id,
                'product_uom_qty': 1,
                'price_unit': target_product.lst_price,
                # 按需补充其他必填字段,如product_uom、tax_id等
            })
    return lines

2. 增加记录存在性校验

在创建新行前,确保关联的订单和产品记录真实存在,避免无效引用报错:

if line.order_id.exists() and target_product.exists():
    # 执行创建逻辑

3. 优化配置查询逻辑

将配置查询移到循环外部,减少数据库查询次数,同时避免重复查询可能引发的状态不一致问题。

额外检查点

  • 确认res.config.settings中已正确配置specify_product_id字段,避免空值导致创建失败
  • 新订单行的必填字段(如product_uom、tax_id)需根据业务场景补充完整,防止字段缺失报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 00:32:44