2016-02-18 11 views
1

Я схожу с ума от того, что я считаю, что это действительно глупое дело. мне нужно сделать результат массива в алфавитном порядке: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? , но это слишком сложно, я чувствую, что есть простое условие, чтобы сделать его правильно ...

любая помощь высоко оценена! Благодаря!

ответ

2

Посмотри this

Вы можете установить новую переменную order_line.sorted(), а затем итерацию по новым переменным

Для сортировки взглянуть на Odoo reference

+0

Благодаря Alessandro, вы можете сказать мне, и где я должен поставить его .... дать мне ошибку:" 'sale.order.line' объект не имеет атрибута 'sort '"при оценке' o.order_line.sort() '" при оценке – erica

+0

см. мое редактирование: я добавил еще одну ссылку на ссылку на odoo –

1

На самом деле вы не можете использовать «.sort()» по одной из основных причин:

  • «.sort()» в списке сортирует li улица в месте, возвращая None

Лучшее, что вы можете сделать, это использовать sorted, который не изменяет итерацию вы передаете его, но возвращает его отсортированный значение. Как это:

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

key может быть любой фикция, которая возвращает значение, которое будет использоваться для сортировки.

См. Еще несколько примеров использования sortedhere.

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>