odoo Qweb按字母顺序报告行

时间:2016-02-18 06:25:59

标签: xml report sql-order-by odoo qweb

我对我认为这是一件非常愚蠢的事情感到疯狂。 我需要按字母顺序渲染数组的结果:

 <tr t-foreach="o.order_line" t-as="l"> 
                    <td>
                       <span t-field="l.name"/>
                    </td>

我应该使用SQL查询SELECT * FROM table ORDER BY l.name DESC吗? 但它接缝太复杂,我觉得有一个简单的条件来正确渲染它......

任何帮助高度赞赏!谢谢!

4 个答案:

答案 0 :(得分:2)

查看this

您可以将新变量设置为 order_line.sorted(),然后迭代新变量

有关排序,请查看Odoo reference

答案 1 :(得分:2)

我刚刚遇到了这个问题,我能够用sorted函数来解决它,正如@Alessandro Ruffolo写的那样。您必须将正确的参数传递给该函数,在您的情况下它将是:

<tr t-foreach="o.order_line.sorted(key=lambda r: r.name, reverse=True)" t-as="l"> 
    <td>
        <span t-field="l.name"/>
    </td>
    ...
</tr>

答案 2 :(得分:1)

实际上你不能使用“.sort()”是一个主要原因:

    列表中的
  • “。sort()”对列表进行排序,返回None

您可以做的最好的事情是使用sorted,它不会修改您传递给它的迭代,但会返回其排序值。像这样:

 <tr t-foreach="sorted(o.order_line, key=lambda x: x.get('A_FIELD_TO_SORT_UPON')" t-as="l"> 

key可以是任何返回用于排序的值的函数。

sorted使用here上查看更多示例。

答案 3 :(得分:0)

如果你想在Odoo报告中对项目进行排序,这将有效!!!

<tr t-foreach="get_room_used_detail(data['form']['date_start'],data['form']['date_end']).sorted(key=lambda x: x.checkin)" t-as="info">