Odoo13中Line行项唯一Item数量统计问题及代码优化需求
解决Odoo 13中唯一Item数量统计问题
我明白你的需求了——你要统计的是唯一Item的个数,而不是所有行项的数量或者每个Item的数量之和。你的原代码错误地累加了每个Item的quantity字段值,这就是为什么得到7而不是2的核心原因。
修正后的代码
@api.depends('move_line_ids.item_id') def get_item_number(self): """ Compute the count of unique items. """ for rec in self: # mapped('item_id') 返回去重后的item_id记录集,直接取长度就是唯一Item的数量 unique_item_count = len(rec.move_line_ids.mapped('item_id')) rec.item_number = unique_item_count
代码解释
- 自动去重:Odoo的
mapped()方法返回的记录集会自动基于数据库ID去重,所以rec.move_line_ids.mapped('item_id')能直接得到所有不重复的Item记录。 - 统计逻辑:直接获取这个去重后记录集的长度
len(),就是你需要的唯一Item总数——比如desk和box各算1个,结果为2;新增不重复的Item时,长度会自动递增,完全满足需求。 - 边界处理:如果
move_line_ids为空,代码会返回0,逻辑严谨无遗漏。
内容的提问来源于stack exchange,提问作者SH EB
相关产品推荐
相关产品推荐

