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

Odoo 10递归深度超出运行时错误排查求助

搞定Odoo 10继承sale_order_line时的递归深度超出错误

嘿,作为Odoo老玩家,一眼就看出你代码里的问题啦!咱们一步步拆解:

1. 装饰器混用直接触发无限循环

你给同一个方法同时加了@api.onchange(product_id)和@api.depends(salesman_id),这俩装饰器完全不是一路人啊:

  • @api.onchange是给前端交互用的,只有用户手动修改字段值时才触发;
  • @api.depends是给计算字段用的,只要依赖的字段发生变化就会自动执行计算。

这么混着用,直接就会形成死循环:比如修改product_id触发onchange方法,要是方法里修改了salesman_id,@api.depends(salesman_id)又会立刻触发这个方法,反复调用直到超出递归上限。

2. 没必要重写product_id字段

你重新声明了product_id,但原sale.order.line模型本来就自带这个字段啊!要是你没打算修改它的核心属性(比如domain、必填性),完全不用重新定义,继承模型时会自动把原字段的所有属性带过来。就算要调整属性,也不用全量重写,直接在继承时针对性修改就行,全量重写反而容易引发字段相关的循环问题。

给你两个修复方案,按需选择:

方案一:产品变更时自动设置销售员(用onchange)

如果你想让用户选完产品后自动填充销售员,用这个:

from odoo import models, fields, api

class SaleOrderLine(models.Model):
    _inherit = 'sale.order.line'

    # 不用重写product_id,直接继承原字段
    salesman_id = fields.Char(string='Salesman')

    @api.onchange('product_id')
    def onchange_product_set_salesman(self):
        for line in self:
            if line.product_id:
                # 这里替换成你实际的逻辑,比如从产品关联的销售员字段取值,或者用当前登录用户
                line.salesman_id = line.product_id.salesman or self.env.user.name
            else:
                line.salesman_id = False

方案二:销售员为自动计算字段(用depends)

如果salesman_id是根据产品或订单销售员自动计算出来的,用这个:

from odoo import models, fields, api

class SaleOrderLine(models.Model):
    _inherit = 'sale.order.line'

    # 定义为计算字段,指定对应的计算方法
    salesman_id = fields.Char(string='Salesman', compute='_compute_salesman_id')

    @api.depends('product_id', 'order_id.user_id')
    def _compute_salesman_id(self):
        for line in self:
            # 这里写你的计算逻辑,比如优先取产品的销售员,再取订单关联的销售员
            salesman = line.order_id.user_id.name if line.order_id.user_id else ''
            if line.product_id and line.product_id.salesman:
                salesman = line.product_id.salesman
            line.salesman_id = salesman

最后再提个小提醒

Odoo 10的递归深度是有限的,千万别在字段变更的方法里修改触发该方法的字段(比如在onchange(product_id)里修改product_id),这会直接触发无限递归,踩坑必中!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:45:01