Как заказать по логическому полю в Odoo?

Я не могу понять поведение Odoo API. Это сводит меня с ума.

Как вы, возможно, знаете, если вы хотите упорядочить модель по некоторым ее полям, вам необходимо изменить атрибут _order модели. Работает нормально.

Теперь предположим, что вы хотите упорядочить определенное представление по некоторым полям без изменения обычного порядка модели (это означает: упорядочить определенное представление по одним полям, а остальные виды той же модели по другим полям).

В этом случае вы должны использовать код XML, указав атрибут default_order в теге kanban или tree, в зависимости от того, какое представление вы изменяете.

Я успешно использовал это в прошлом. Поэтому я хотел снова применить это к представлению канбан (на этот раз я хочу упорядочить по полю boolean, char и еще одному char) .

Теперь мое удивление: упорядочивание по полю логического меняет порядок следующих полей, если оно имеет значение False.

например. У нас есть 6 записей, которые мы хотим отсортировать по логическому значению, имени и фамилии; в канбан-представлении с default_order:

  • Верно, Джон, Доу
  • Правда, Джейн, Доу
  • Верно, Джон, Xoe
  • Ложь, Джон, умереть
  • Ложь, Джейн, умри
  • Ложь, Джейн, Се

Итак, в примере в представлении канбан мы увидим, что они упорядочены следующим образом:

  1. Правда, Джейн, Доу
  2. Верно, Джон, Доу
  3. Верно, Джон, Xoe
  4. Ложь, Джон, умереть
  5. Ложь, Джейн, Се
  6. Ложь, Джейн, умри

Как видите, если используются логические значения True, записи упорядочиваются по логическому, имени и фамилии, что я и хочу. Но если он имеет значение False, записи упорядочиваются по логическому, имени DESC, фамилии DESC.

В чем дело? Вы испытали то же самое? Как сделать заказ с помощью логического, затем char, а затем еще одного char ??


person forvas    schedule 16.06.2015    source источник


Ответы (1)


Один из методов, который я использую для нечетной сортировки, использует контекст для управления этим. В действии окна для представления канбан добавьте контекст, например

<field name="context">{'do_my_special_sort': True}</field>

а затем в модели переопределите метод поиска, проверьте наличие этого флага в контексте и установите порядок сортировки.

person Adrian Merrall    schedule 16.06.2015
comment
Большое спасибо, @Adrian! Это хороший способ справиться с этим. Но в моем случае представление канбана находится внутри поля one2many внутри формы (это точно такой же случай, как поле child_ids в представлении формы res.partner). Так что мне нужно изменить контекст действия, вызывающего форму, не так ли? И затем, повлияет ли порядок поиска на представление канбана внутри поля? - person forvas; 17.06.2015
comment
Вы должны иметь возможность просто поместить контекст в определение ‹field› слова one2many, но вам, возможно, придется попробовать несколько вещей. - person Adrian Merrall; 18.06.2015
comment
Он работает с контекстом в поле. Обходной путь, который я сделал ранее, заключался в создании другого поля типа Char, вычисление которого зависело от логического поля и с store=True. В этом Char хранилось значение логического значения, преобразованное в строку. Итак, в канбане я смог упорядочить логическое значение с помощью этого Char. Но я думаю, что ваше решение правильнее и лучше. Спасибо, @Adrian! - person forvas; 19.06.2015