You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Odoo 17 POS收据自定义:无法遍历props.data.orderlines对象

Odoo 17 POS收据自定义:无法遍历orderlines的解决方案

问题根源

Odoo 17 POS前端基于OWL框架重构,props.data.orderlines中的每一项并非普通JSON对象,而是Orderline模型的实例对象。你尝试直接访问的full_product_name、price_unit等字段,属于类的getter属性或需要通过实例方法获取,并非可直接枚举的对象属性,所以直接用x.field_name无法读取到值。

解决步骤

1. 确认实例结构(调试用)

先在模板中打印每个orderline实例的实际可访问内容,排查字段存储方式:

<t t-foreach="props.data.orderlines" t-as="line">
  <div t-esc="JSON.stringify(line)"></div>
</t t-foreach>

也可以在浏览器开发者工具控制台中打印props.data.orderlines,查看实例的属性和方法。

2. 正确读取字段值

使用Odoo POS模型实例提供的get()方法来获取字段值,这是官方推荐的安全方式:

<t t-foreach="props.data.orderlines" t-as="line">
  <div class="order-line">
    <span class="product-name" t-esc="line.get('full_product_name')"></span>
    <span class="product-price" t-esc="line.get('price_unit')"></span>
    <span class="product-qty" t-esc="line.get('quantity')"></span>
  </div>
</t t-foreach>

3. 备选方案(不推荐依赖内部属性)

如果get()方法无法满足需求,可临时访问实例的_data属性(存储原始数据的内部对象),但注意Odoo版本迭代可能会修改该属性,存在兼容性风险:

<t t-esc="line._data.full_product_name"></t t-esc>

为什么OrderWidget能正常显示?

OrderWidget组件内部已经封装了对Orderline实例的处理逻辑,会自动调用实例的get()方法或读取正确的属性来渲染字段,无需开发者手动处理实例访问逻辑。

内容的提问来源于stack exchange,提问作者altela

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 09:09:54