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

Odoo 15中通过OdooRPC调用自定义模型方法遇空记录集错误求助

OdooRPC调用自定义模型方法时记录集为空的问题排查

问题背景

在Odoo 15环境下,使用部署在AWS Lambda中的OdooRPC库调用自定义模型的driver_fxn()方法批量更新记录属性,出现操作数错误。查看Odoo.sh日志发现:代码中new_record明明指向正确记录,但driver_fxn()实际是在空记录集上执行。

尝试的代码

# 已定义变量:
# model_values 是用于创建记录的参数字典
# 赋值模型变量
Model = api.env['custom.model']
# 创建新记录
new_record = Model.create(model_values)
# 获取该记录的Recordset对象
new_record = Model.browse(new_record)
# 调用自定义方法更新记录值
new_record.driver_fxn()

问题原因

  1. OdooRPC返回值处理问题:create()方法返回的是记录ID(或ID列表),但后续用Model.browse(new_record)时,若Lambda环境的OdooRPC连接存在上下文丢失,会导致browse()返回空记录集。
  2. 环境上下文不一致:Lambda中每次调用OdooRPC时,若env的上下文(如用户、公司)与创建记录时不匹配,会导致无法正确查询到记录。

解决方法

1. 直接通过ID构建有效记录集调用方法

不需要额外重新赋值new_record,创建记录后直接用返回的ID调用方法,确保记录集有效:

Model = api.env['custom.model']
# 创建记录并获取ID
new_record_id = Model.create(model_values)
# 直接用ID构建记录集并调用方法
Model.browse(new_record_id).driver_fxn()

2. 确保环境上下文一致性

在Lambda中调用OdooRPC时,显式指定上下文参数(如公司ID),避免上下文切换导致的记录查询失败:

# 显式指定公司上下文
Model = api.env['custom.model'].with_context(company_id=你的公司ID)
new_record_id = Model.create(model_values)
Model.browse(new_record_id).driver_fxn()

3. 检查自定义方法的健壮性

在driver_fxn()方法开头添加空记录集检查,避免因空集执行后续逻辑报错:

class CustomModel(models.Model):
    _name = 'custom.model'
    
    def driver_fxn(self):
        # 先检查记录集是否为空
        if not self:
            return
        # 后续业务逻辑
        # ...

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 20:22:12