Odoo发票计算字段实现运费总计计算的问题
问题诊断与修复方案
嘿,我一眼就发现你代码里的问题啦,这就是为啥运费总计一直显示0.00的原因:
核心问题分析
错误的集合判断逻辑
你直接用record.invoice_line_ids.product_id == "FREIGHT"做判断,但invoice_line_ids是多条发票行的集合,而且product_id是关联到产品模型的字段(不是纯字符串),这种比较方式永远不会返回True,导致赋值代码根本没机会执行。求和未过滤目标行
就算判断逻辑正常,sum(record.invoice_line_ids.price_subtotal)会把所有发票行的小计都加起来,而不是只针对产品为"FREIGHT"的行。
修复后的计算代码
我假设你是用产品的default_code(内部参考)来标记"FREIGHT"的,如果是用产品名称的话,把product_id.default_code换成product_id.name就行:
for record in self: # 先过滤出所有产品为"FREIGHT"的发票行 freight_lines = record.invoice_line_ids.filtered( lambda line: line.product_id.default_code == "FREIGHT" ) # 只对过滤后的行的price_subtotal求和 record['x_studio_freight_total'] = sum(line.price_subtotal for line in freight_lines)
额外验证提示
- 确认产品标识:检查你的"FREIGHT"产品是用
default_code还是name来标识的,对应调整lambda表达式里的判断字段。 - 依赖项没问题:你设置的
invoice_line_ids.price_subtotal, invoice_line_ids.product_id依赖项是正确的,能确保发票行变化时字段自动重新计算。 - 空场景兼容:如果没有FREIGHT行,代码会自动返回0.00,符合预期。
现在测试一下:
- 单条FREIGHT行(小计12.75):会正确显示12.75
- 两条FREIGHT行(12.75+7.50):会得到20.25
内容的提问来源于stack exchange,提问作者Cameron Wolfe
相关产品推荐
相关产品推荐

