出库时的 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 拆行。
不再泛讲 _check_company_auto,而是只解释 _check_company_domain 怎么把 company_id=False 共享记录、res.company 自身记录与普通业务单据区分开,帮助开发者读懂哪些跨公司关联其实是被设计允许的。
列表分组看起来像一次把多层都算完,其实 Odoo 的 read_group 默认 lazy=True,只先做第一层聚合,再把剩余分组条件放进 __context。本文结合 odoo/orm/models.py 讲清 lazy 模式、__domain、__context、时间分组格式化以及报表开发最常踩的坑。
很多人把 domain_force 当成“写个 domain 就完了”,但 Odoo 真正执行记录规则时,还会区分全局规则、分组规则、_inherits 父模型规则与缓存。本文从 ir_rule.py 出发,讲清 domain_force 如何被 safe_eval、如何 AND/OR 拼装,以及为什么同一条规则有时看起来没生效。
spreadsheet_revision 的设计重点不是存内容,而是用 revision UUID、父子链和唯一约束保护协作顺序,再配合清理策略控制历史膨胀。
很多人把 groups 只当成“控制显示”。但在 Odoo 里,字段 groups、视图节点 groups、模型访问权和表达式依赖会一起工作。本文从 ir_ui_view.py 和 NameManager 源码讲清为什么页面会出现 Access Rights Inconsistency。
很多人把 display_name 当成一个普通展示字段,但 Odoo 官方源码里,它其实串起了对象如何显示、如何被 name_search 命中,以及没有 _rec_name 时的兜底行为。本文讲清显示名、搜索名和快速创建之间的真正边界。