出库时的 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 拆行。
不是把一个动作建出来就一定会出现在侧边栏。Odoo 还要过绑定模型、分组权限、可读权限和缓存这几道关。
讲清 Command.create / update / delete / unlink / link / clear / set 的语义,以及它们在 create、write、复制和批量改关系时的真实作用。
很多人知道销售单确认后会触发库存,但容易把这件事理解成“sale 直接生成 picking”。结合 sale_stock 与 stock 源码看,真实主线更像是:订单行先组织 procurement values,再交给 stock.rule.run 分流,最后由 move/picking 链路继续推进。
Odoo 的 x2many 写法常被记成一串“0 到 6”的魔法数字,但真正难点不是背数字,而是搞清它们在 one2many 和 many2many 上的语义并不完全相同。结合 commands.py 与 fields_relational.py,本文把 create、update、delete、unlink、link、clear、set 的真实效果一次讲透。
很多人以为 compute 方法一跑,store=True 字段就会立刻写回数据库。但从 Odoo ORM 源码看,真实机制是“先标记待重算,再在合适时机批量 recompute”。理解 tocompute、precompute、flush 和 _recompute_field,才能真正看懂为什么某些值看起来会“晚一步”。
从预览、字段猜测到真正落库,拆开看 base_import 如何把一份外部文件变成可导入的 ORM 数据。