Я не думаю, что вы можете сделать Python-стиль enumerate
, но вы можете просто использовать старомодный счетчик, такой как ниже.
<t t-set="counter" t-value="0"/>
<t t-foreach="records" t-as="record">
<t t-set="counter" t-value="counter + 1"/>
<t t-if="counter == 1">
<!-- Do Something. -->
</t>
</t>
Вот пример , где они делают это в ядре.
Вот документация QWeb для Odoo 12 с дополнительной информацией.
Что касается вашего конкретного примера, вы хотите унаследовать существующее представление, чтобы включить counter
внутри существующего элемента t-foreach
этого представления.
Соответствующая часть существующего представления
<tr t-foreach="o.order_line" t-as="line">
<td>
<span t-field="line.name"/>
</td>
<td>
<span t-esc="', '.join(map(lambda x: x.name, line.taxes_id))"/>
</td>
<td class="text-center">
<span t-field="line.date_planned"/>
</td>
<td class="text-right">
<span t-field="line.product_qty"/>
<span t-field="line.product_uom.name" groups="product.group_uom"/>
</td>
<td class="text-right">
<span t-field="line.price_unit"/>
</td>
<td class="text-right">
<span t-field="line.price_subtotal"
t-options='{"widget": "monetary", "display_currency": o.currency_id}'/>
</td>
</tr>
Как использовать счетчик
Отказ от ответственности: я не делал ничего подобным образом раньше. Это может или не может работать именно так. Если вы не можете заставить его работать через наследование, тогда вы можете replace
весь цикл foreach
через xpath
, если необходимо.
<xpath expr="//tr[@t-foreach='o.order_line']" position="before">
<t-set="counter" t-value="0"/>
</xpath>
<xpath expr="//tr[@t-foreach='o.order_line']/td[1]" position="before">
<t-set="counter" t-value="counter + 1"/>
<t t-if="counter == 1">
<!-- Do Something. -->
</t>
</xpath>