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吗?但它的接缝太复杂了,我觉得有一个简单的条件可以正确渲染它......

任何帮助都非常感谢!谢谢!

看看这个

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

有关排序,请查看Odoo参考

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

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

实际上你不能使用".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用法的更多示例。

如果要在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">

最新更新