如何使用 t-if 在行号中创建条件

How to use t-if to make condition in row number

我尝试在 odoo 11 中修改报告发票中的一行,我需要有关单击 "Print" 按钮后报告生成的行数的条件,以使

<t-if="number_line_in_table== 1">
   <!--DO something..-->
</t>

我不认为你可以做一个 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>

这是 an example 他们在核心中执行此操作的地方。

这是包含更多信息的 QWeb Documentation for Odoo 12


对于您的具体示例,您希望继承现有视图以在该视图的现有 t-foreach 元素中包含一个 counter

现有视图的相关部分

<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>

如何使用计数器

免责声明:我以前从未以这种方式做过任何事情。它可能会或可能不会完全像这样工作。如果您无法通过继承使其工作,那么您可以通过 xpath replace 整个 foreach 循环,如有必要。

<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>