2016-09-01 17 views
3

У меня есть набор записей партнеров. Теперь я хочу заказать этот набор записей двумя атрибутами. Один из этих атрибутов - простой Char, но другой - Many2one, что является проблемой.Как заказать по двум полям в Odoo 8?

Пример (предположим, что переменная partners является записей):

  • Это работает: partners.sorted(key=lambda r: r.name)Char проблем нет).
  • Это не работает: partners.sorted(key=lambda r: r.country_id)Many2one, вы должны добавить атрибут другой модели).
  • Это работает: partners.sorted(key=lambda r: r.country_id.id) (теперь мы указали атрибут res.country, набор записей упорядочен правильно).

Проблема в следующем: мне нужно заказать два поля, как я писал выше. Для этого, кажется, что я должен использовать itemgetter, но:

  • Это не работает: partners.sorted(key=itemgetter('name', 'country_id')) (country_id игнорируется, а когда я попытался заказать только этот выше).
  • Это дает ошибку: partners.sorted(key=itemgetter('name', 'country_id.id')) (сообщение об ошибке country_id.id не является полем res.partner).
  • Это похоже на работу: partners.sorted(key=itemgetter('name', 'phone')) (поскольку оба поля: Char).

Я также попытался связать два отсортированных в ряд, таким образом:

partners.sorted(key=lambda r: r.name).sorted(key=lambda r: r.country_id.id) 

Но это не работает ни, потому что вторая sorted функция портит результат первого.

Может ли кто-нибудь помочь мне с этим, пожалуйста?

ответ

0

насчет

partners.sorted(key=lambda p: (p.name, p.country_id.id)) 
+0

Спасибо вам большое! Оно работает! – forvas

1

Я думаю, вам нужно сортировать с помощью country name.
Использование последней строки кода и вызова сортировать одно время он будет решать эту проблему:

partners.sorted(key=lambda r: (r.name, r.country_id.name)) 
+0

Большое спасибо @ Kenly, это работает, но не нужно заказывать по стране 'имя', я смог без проблем заказать по стране' id'. – forvas