如何在Odoo 8的两个领域订购?

时间:2016-09-01 11:26:01

标签: python python-2.7 odoo-8 odoo

我有合作伙伴的记录集。现在我想通过两个属性来订购这个记录集。其中一个属性是简单的Char,但另一个是Many2one,这是一个问题。

示例(假设变量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函数会弄乱第一个{{1}}的结果。

有人可以帮帮我吗?

2 个答案:

答案 0 :(得分:1)

我认为您需要使用country name进行排序 使用您的上一个代码行并调用一次排序将解决问题:

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

答案 1 :(得分:0)

怎么样?
partners.sorted(key=lambda p: (p.name, p.country_id.id))