我为我认为这是一件非常愚蠢的事情而疯狂。我需要按字母顺序呈现数组的结果:
<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">