Qweb: Как я могу использовать метод sort () или функцию sorted () на Qweb?

#odoo #qweb

#odoo #qweb

Вопрос:

Я пытаюсь вызвать метод sort () и функцию sorted (), но это не работает.
Вызов функции sorted() :

 <t t-set='data' t-value="{4: 'd', 3: 'c', 'b': 2, 'a': 1}"/>
<t t-set="list_key" t-value="sorted(list(data.keys()))"/>
<t t-esc="list_key"/>
  

Но это выдает мне ошибку типа :

Ошибка при рендеринге при компиляции AST TypeError: объект ‘NoneType’ не вызывается

Вызов метода sort():

 <t t-set='data' t-value="{4: 'd', 3: 'c', 'b': 2, 'a': 1}"/>
<t t-set="list_key" t-value="list(data.keys()).sort()"/>
<t t-esc="list_key"/>
  

Это не выдает ошибки, но когда я пытаюсь получить доступ к одному элементу list_key, я получаю эту ошибку :

Ошибка при рендеринге при компиляции AST TypeError: объект ‘NoneType’ не поддается подписке

Вы можете мне помочь? Спасибо вам.

Комментарии:

1. [решено], создаем метод внутри модели, затем вызываем его в qweb

2. Можете ли вы включить свое решение в качестве полного ответа (с вашим рабочим кодом) на случай, если у кого-нибудь возникнет такая же проблема в будущем?

3. класс TheModel (модели. Модель): _inherit = ‘the.model’ @api.multi def sort_key(self, k): возвращает отсортированную(k)

4. боже, я не знаю, как отформатировать это внутри комментария

Ответ №1:

Я не знаю, зачем вам понадобилось создавать метод сортировки внутри вашего определения модели, поскольку sorted метод уже предусмотрен для применения к набору записей, также может быть использован внутри qweb. Например, эта строка взята из кода сообщества odoo:

 <t t-foreach="move.move_line_ids.sorted(key=lambda ml: ml.location_id.id)" t-as="ml">
  

Для получения дополнительной информации о sorted методе odoo ORM вы можете прочитать официальную документацию.

Комментарии:

1. Потому что в моем случае я использую не объект из Odoo ORM, а переменные python, которые я передаю через данные в отчете. Я пытаюсь использовать метод sorted (), но он не работает.