跳至内容

销售订单行模型:深入理解Odoo的架构

Odoo 销售订单行模型的完整指南,供开发人员和功能顾问使用
2026年3月10日
销售订单行模型:深入理解Odoo的架构
Dasolo
| 还没有评论

介绍


在 Odoo 中,模型定义了数据在数据库中的结构和存储方式。您处理的每一条业务数据,从销售订单到发票再到联系人,都存在于一个模型中。


理解 Odoo 模型对开发人员和功能顾问都至关重要。模型是 Odoo 数据架构的基础。它们定义了字段、关系和业务逻辑。


本文重点介绍销售模块中最重要的模型之一:sale.order.line。无论您是在构建自定义模块、集成外部系统,还是配置定价工作流程,您都将与该模型打交道。

什么是 sale.order.line 模型


sale.order.line模型表示Odoo中报价或销售订单上的单个行项目。每个行项通常对应一个产品,包含数量、价格和税务信息。


Odoo中的此模型由销售模块(sale)使用。它继承自analytic.mixin,用于项目成本跟踪和时间表集成。当您将产品添加到报价中时,您正在创建一个sale.order.line记录。


该模型在销售模块中定义。其他模块通过Odoo模型继承扩展它。例如,sale_stock添加与交付相关的字段。sale_margin添加利润计算。每个模块根据需要添加内容,而不重复核心结构。

模型中的关键字段


以下是sale.order.line模型中最重要的Odoo字段。理解这些将帮助您有效处理报价和销售订单。


1. order_id

类型:Many2one(sale.order)。必填。引用父销售订单。此字段将每个行项链接到其父项。当订单被删除时,行项也会被删除(级联)。


2. sequence

类型:整数。默认值10。控制订单上行项的显示顺序。用于对部分、备注和产品行进行排序。


3. company_id

类型:Many2one(res.company)。从order_id相关。用于多公司规则和访问控制。


4. currency_id

类型:Many2one(res.currency)。从order_id相关。用于行上的所有货币字段。确保定价的正确货币。


5. order_partner_id

类型:Many2one (res.partner)。从 order_id 相关。客户。用于价格表和税务规则。


6. salesman_id

类型:Many2one (res.users)。从 order_id 相关。销售人员。用于佣金和报告。


7. state

类型:选择。 从 order_id 相关。订单状态(草稿、已发送、销售、完成、取消)。决定哪些字段是可编辑的。


8. display_type

类型:选择。值:line_section 或 line_note。当设置时,该行是一个部分标题或备注,而不是产品行。产品字段为空。


9. is_downpayment

类型:布尔值。指示该行是否为预付款。预付款单独开票。


10. is_expense

类型:布尔值。当该行来自费用或供应商账单时为真。用于项目成本跟踪。


11. product_id

类型:Many2one (product.product)。正在销售的产品。域限制为可销售产品。产品行必需。


12. product_template_id

类型:Many2one (product.template)。从 product_id 计算得出。由产品配置器用于变体选择。


13. name

类型:文本。行描述。从产品和自定义属性计算得出。包括变体详细信息(如适用)。


14. product_uom_qty

类型:浮动。必需。订购数量。默认值为 1.0。可以由包装驱动。


15. product_uom

类型:Many2one (uom.uom)。计量单位。默认值来自产品。用于数量和定价。


16. tax_id

类型:Many2many (account.tax)。应用于该行的税费。从产品和财政位置计算得出。


17. 价格单位

类型:浮动。必填。每个产品单位的单价。根据价格表或产品计算。可以手动覆盖。


18. 折扣

类型:浮动。折扣百分比。在税前应用于价格单位。


19. 小计价格

类型:货币。税前小计。根据数量、单价和折扣计算。


20. 税额

类型:浮动。总税额。根据小计价格和税务ID计算。


21. 总价格

类型:货币。包含税的总金额。开票的主要金额。


22. 产品包装ID

类型:多对一(product.packaging)。可选包装(例如,12个装的盒子)。设置后,数量可以由包装驱动。


23. customer_lead

类型:浮动。交货时间(天)。从订单确认到发货之间的天数。用于交货日期计算。


24. qty_delivered

类型:浮动。交付数量。通过库存移动或手动更新。用于部分开票。


25. qty_invoiced

类型:浮动。已开票数量。从发票行计算得出。


26. qty_to_invoice

类型:浮动。剩余待开票数量。从已交付数量和已开票数量计算得出。


27. invoice_status

类型:选择。值:追加销售、已开票、待开票、无。指示该行的开票状态。


28. invoice_lines

类型:多对多(account.move.line)。链接到从此销售行创建的发票行。用于可追溯性。


29. 创建日期

类型:日期时间。记录创建的时间。由Odoo自动管理。


30. 修改日期

类型:日期时间。记录最后修改的时间。用于审计。

该模型在业务工作流程中的使用


1. 报价单和销售订单

当销售人员创建报价单时,他们会添加产品。每个产品成为一个 sale.order.line。行显示数量、价格、折扣和总计。当客户接受时,订单被确认。


2. 价格表和折扣

价格表按行应用。price_unit 和 discount 字段根据价格表规则计算。这里处理批量折扣或客户特定定价。


3. 交付和开票

当库存交付时,qty_delivered 会更新。可以按交付或一次性开票。invoice_status 字段指导用户剩余的开票内容。


4. 项目和服务

对于服务产品,行链接到项目任务和工时表。analytic.mixin 继承使得每个项目的成本跟踪成为可能。


5. 电子商务和门户

网站访问者将产品添加到购物车。每个购物车行在订单创建时变成 sale.order.line。产品配置器使用 product_template_id 和自定义属性。

开发人员如何扩展该模型


开发者使用多种模式扩展 sale.order.line。Odoo 模型继承是主要机制。


模型继承

使用 _inherit = 'sale.order.line' 来扩展模型。添加新字段,重写方法或添加约束。Odoo 中的继承模型将您的更改保存在单独的模块中,以便于升级。


添加字段

在您继承的模型中定义新的 Odoo 字段。使用正确的字段类型:Char、Many2one、Boolean、Integer、Text、Selection。考虑多公司的公司依赖字段。


Python 扩展

重写 _compute_price_unit_compute_price_subtotal,或创建/写入以添加逻辑。使用 super() 调用原始方法。对计算字段及其依赖关系要小心。


Odoo Studio

Odoo Studio 让您无需代码即可添加字段。适合快速自定义。对于复杂逻辑或升级,自定义模块更易于维护。

最佳实践


  • 使用 display_type 来处理部分和注释,而不是虚假的产品行。这可以保持报告的整洁。
  • 在构建 API 集成时,通过 order_id 创建行。使用 sale.order 上的 order_line_ids 字段,并采用正确的命令格式。
  • 遵守 SQL 约束。产品行必须具有 product_id 和 product_uom。部分或备注必须具有 display_type。
  • 对于自定义定价,尽可能使用价格表规则。仅在需要价格表不支持的逻辑时覆盖计算方法。
  • 对于自定义字段,使用 x_ 前缀或模块前缀,以避免与未来的 Odoo 版本发生冲突。

常见错误


  • 创建没有 order_id 的行。该字段是必需的。始终在订单的上下文中创建行。
  • 混淆 product_id 和 product_template_id。对于产品行,设置 product_id。对于配置器流程,使用 product_template_id 选择变体。
  • 在开票后修改 price_unit 或 discount。一旦 qty_invoiced 大于零,价格变更可能会导致不一致。
  • 覆盖核心方法而不调用 super()。这可能会破坏其他模块或未来的升级。
  • 忘记为部分或备注行设置 display_type。没有它,该行将被视为产品行并将失败验证。

结论


sale.order.line 模型是 Odoo 销售的核心。它存储报价和订单中的每个产品行。理解其字段以及模块如何扩展它将帮助您有效配置、定制和集成 Odoo。


无论您是映射业务流程的功能顾问,还是构建自定义模块的开发人员,深入了解 sale.order.line 将节省时间并防止错误。

需要帮助进行 Odoo 实施吗?


Dasolo 帮助公司实施、定制和优化 Odoo。我们专注于 API 集成和 Odoo 开发。我们的团队在 Odoo 数据架构和像 sale.order.line 这样的模型方面具有深厚的经验。


如果您需要帮助进行 Odoo 实施、自定义模块或集成,我们随时为您提供帮助。 预约演示 以讨论您的项目。

销售订单行模型:深入理解Odoo的架构
Dasolo 2026年3月10日
分析这篇文章
登录 留下评论