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

Odoo13继承crm.lead模型读取one2many字段order_ids报栈溢出如何解决

错误原因

  • 计算字段的实现逻辑不符合Odoo ORM规范:计算字段的处理方法不需要返回值,而是需要直接为self中的每条记录的对应字段赋值,你写的return逻辑会导致Odoo反复触发计算逻辑,最终栈溢出。
  • 缺少@api.depends装饰器:Odoo的计算字段必须显式声明依赖字段,才能正确触发计算,也能避免不必要的重复计算。
  • 不需要通过super调用order_ids:你已经正确继承了crm.lead模型,直接通过当前记录实例就能访问sale_crm模块新增的order_ids字段,多余的super调用也可能导致递归问题。
  • 没有适配多记录集场景:Odoo的ORM方法传入的self通常是包含多条记录的集合,需要遍历处理每一条记录,直接操作self整体会导致逻辑错误。

正确实现代码

from odoo import api, fields, models

class Co7Lead(models.Model):
    _inherit = "crm.lead"

    so_list = fields.Text(
        compute='_compute_so_list',
        string="Text list of associated SOs",
        help="A comma separated list of SOs associated with this lead"
    )

    @api.depends('order_ids.name')
    def _compute_so_list(self):
        for lead in self:
            # 直接提取所有关联订单的名称,逗号拼接后赋值
            so_name_list = lead.order_ids.mapped('name')
            lead.so_list = ', '.join(so_name_list)

逻辑说明

  • @api.depends('order_ids.name') 声明计算依赖关联销售订单的name字段,只要关联的订单发生变化、或者订单名称发生修改,都会自动触发so_list字段的重新计算。
  • 遍历self中的每一条线索记录,兼容多记录批量处理的场景。
  • 用ORM内置的mapped方法直接提取所有关联订单的名称,不需要手动循环拼接,代码更简洁,执行效率也更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 19:24:05