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

Odoo中外键route_id值判断异常问题求助

问题解决:Odoo订单行route_id筛选异常处理

问题原因

在Odoo中,route_id作为外键字段,存储的是关联的route对象(RecordSet实例),而非直接的整数值:

  • 使用lambda l: l.route_id == 11时,是将对象和整数11做比较,永远不相等,导致筛选结果为空,最终dropship_notes_ind始终为False。
  • 使用lambda l: l.route_id时,仅判断字段是否非空,会包含所有route_id不为Null的记录,不符合仅筛选route_id为11的需求。

解决方案

有两种可行的修改方式:

方式1:通过对象id属性判断

修改lambda表达式,先判断route_id非空,再比较其id属性:

def _compute_dropship_notes_ind(self):
    for order in self:
        # 筛选route_id为11的订单行
        any_dropship_lines = order.order_line.filtered(lambda l: l.route_id and l.route_id.id == 11)
        order.dropship_notes_ind = bool(any_dropship_lines)

方式2:使用Odoo域表达式(推荐)

利用Odoo内置的域筛选语法,filtered方法支持直接传入域列表,Odoo会自动处理外键关联逻辑,性能更优:

def _compute_dropship_notes_ind(self):
    for order in self:
        # 用域表达式精准筛选route_id为11的记录
        any_dropship_lines = order.order_line.filtered([('route_id', '=', 11)])
        order.dropship_notes_ind = bool(any_dropship_lines)

说明

  • 方式1通过判断对象的id属性实现精准匹配,同时加入l.route_id判断避免Null值引发的AttributeError。
  • 方式2的域表达式是Odoo推荐的筛选方式,会转化为SQL查询在数据库层面完成筛选,比内存中遍历lambda表达式效率更高,且无需手动处理Null情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 22:16:09