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()
问题原因
- OdooRPC返回值处理问题:
create()方法返回的是记录ID(或ID列表),但后续用Model.browse(new_record)时,若Lambda环境的OdooRPC连接存在上下文丢失,会导致browse()返回空记录集。 - 环境上下文不一致: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
相关产品推荐
相关产品推荐

