出库时的 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 拆行。
很多人把前端保存理解成“RPC 调一次 write 就结束”。但 web 客户端真实常用的是 web_save + web_read 组合。本文从 web/models/models.py 源码讲清 create/write、next_id 与保存后回读为什么会影响你看到的结果。
很多人知道 Odoo 可以开 Down Payment Invoice,但容易把它理解成“先随便开一张发票”。其实源码里这条链路专门做了预付款建模、税额拆分、销售行锚定和后续抵扣语义。本文讲透这个向导到底在干什么。
很多人以为点击库存单上的 Validate 就是“直接完成”。但在 Odoo 源码里,button_validate 更像总闸门:它会先做检查、再跑向导、最后才可能进入 _action_done。本文把这条链路讲透。
很多复制逻辑之所以越改越乱,不是因为 Odoo 的复制机制复杂,而是开发者没有分清 copy_data 是准备数据,copy 才是创建新记录。本文结合 ORM 源码讲透这条边界。
Odoo 不是所有原料都在整张 MO 上一起消耗。BOM line 和 by-product 可以绑定到具体 operation,系统会把 move 挂到对应 work order。本文把这层设计讲清楚。
菜单可见性不是单纯看 group_ids。Odoo 还会批量预读 action、检查模型读权限,并把祖先菜单一起补出来。