产品模型

Odoo product.template 和 product.product 为什么总让人分不清:产品模板与变体模型一文讲透

很多产品定制一旦涉及规格、条码、库存或价格,就会绕到 product.template 和 product.product。本文把这两个模型的边界一次讲清。

Odoo 开发 库存 销售
进阶 开发者 1 分钟阅读
0 评论 0 点赞 0 收藏 6 阅读

先说结论

在 Odoo 里,很多人以为“产品就是一张产品表”。

但真正常用的两个核心对象其实是:

  • product.template
  • product.product

最实用的理解是:

template 更像产品母版,product 更像可被实际买卖、库存、条码和变体区分的具体 SKU。

一旦你开始做规格、颜色、尺码、库存、条码这些东西,这两个模型就必须分清。


为什么这个问题特别容易混

因为在最简单场景里,一个模板可能只对应一个变体。

于是你会产生错觉:

  • 这俩不就差不多吗?

但一旦进入多属性产品,比如:

  • 颜色
  • 尺码
  • 版本
  • 包装规格

差异就会立刻放大。

这也是为什么很多产品相关 bug,根因其实不是库存逻辑,而是模型边界没想清。


product.template 更像什么

它更像:

这个产品家族的公共定义。

通常它承载的是:

  • 产品名称
  • 通用描述
  • 通用分类
  • 大部分共享属性
  • 变体生成规则

也就是说,它更像“这一类产品的统一母版”。


product.product 更像什么

它更像:

真正落到业务执行层的具体可操作对象。

很多实际业务动作更关心的是它:

  • 哪个具体条码
  • 哪个具体规格组合
  • 哪个具体库存数量
  • 哪个具体销售行上的商品

所以如果你在想“仓库里到底是哪一件货”,通常就更接近 product.product


为什么变体一进来,边界就很关键

因为变体会把“公共信息”和“具体组合”拆开。

例如一个 T 恤:

  • 模板层:T 恤这个产品家族
  • 变体层:黑色 / L 码、白色 / M 码……

这时你如果还用“一个产品就是一个对象”的脑回路,很快就会乱。

所以一旦开始做属性组合,就要自然地切到:

  • 模板 = 统一定义
  • 变体 = 具体执行对象

为什么库存和条码问题常常更靠近 product.product

因为库存、预留、移动、条码这些东西,通常都必须落到“具体 SKU”。

仓库不会问:

  • 这是不是某个产品家族

它会问:

  • 到底是哪一个具体变体
  • 是哪一个条码
  • 是哪一个库存对象

所以很多库存问题如果你还只盯 template,很容易看偏。


实战里最容易踩的 5 个坑

1. 该在模板层配的东西写到变体层

后面共享逻辑会乱。

2. 该在变体层区分的东西只写模板层

规格差异表达不出来。

3. 只在无变体场景测试

一上属性组合就爆问题。

4. 库存/条码问题还按 template 思维排查

方向会偏。

5. 把“产品展示对象”和“业务执行对象”混成一层

后面价格、库存、条码、采购都容易乱套。


一句话记忆法

把它记成一句话:

product.template 是产品家族母版,product.product 是真正参与库存、销售、条码和变体组合的具体 SKU。

理解这一句,很多产品模型问题都会瞬间清楚。

DISCUSSION

评论区

想参与讨论?先 登录 再发表评论。
还没有评论,你可以成为第一个留言的人。