出库时的 stock.move.line 是如何确定的
用通俗但不失源码细节的方式,讲清楚 Odoo 出库时 stock.move.line 的生成逻辑:从 stock.move、stock.quant、移除策略到 lot/serial 拆行。
CATEGORY FOCUS
聚合 Odoo 开发基础、源码理解、ORM、模型、视图、安全与扩展实践。
TOPIC PICKS
用通俗但不失源码细节的方式,讲清楚 Odoo 出库时 stock.move.line 的生成逻辑:从 stock.move、stock.quant、移除策略到 lot/serial 拆行。
很多人把 compute_sudo 当成一个不起眼的小参数,但它真正决定的是计算字段在谁的权限边界下执行。默认值、存储字段、related 字段和数据泄露风险,这篇一次讲透。
有些问题不是“预留失败”,而是“系统压根还没开始预留”。本文不再泛讲“有货却不分配”,而是专门拆解 free_qty、reservation_date、reservation method、operation type、bypass reservation 等因素,解释 Odoo 为什么会让一张 move 暂时停在 confirmed。
在 Odoo 里,compute、onchange、constraints 和 recompute 经常被当成“差不多的自动化”。其实它们分别负责依赖驱动、界面联动、保存校验和存储字段重算。
结合 cloud_storage_migration 源码,讲清 Odoo 如何用 checkpoint、批量切片和预提交标记,把本地附件迁移到云存储做成可续跑、少重复上传、尽量不阻塞业务的链路。
很多人把 Odoo 编号理解成“找到最后一条,再加一”。但从 sequence_mixin.py 看,真正困难的不是 +1,而是先判断这串编号按月重置、按年重置还是永不重置,再在并发事务里安全地抢到下一个号,还不能把日期和编号链打乱。
很多人以为 Odoo 默认值只有字段 default。其实 models.py 的 default_get 明确按 context、ir.default、field.default、company_dependent fallback 与 inherited 字段委托顺序取值。