如何在 Odoo 8 中按两个字段排序?
How to order by two fields in Odoo 8?
我有一个合作伙伴记录集。现在我想按两个属性对这个记录集进行排序。其中一个属性是简单的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
)。
我也试过link两个排成一行,这样:
partners.sorted(key=lambda r: r.name).sorted(key=lambda r: r.country_id.id)
但它也不起作用,因为第二个 sorted
函数弄乱了第一个函数的结果。
谁能帮我解决这个问题?
那
呢
partners.sorted(key=lambda p: (p.name, p.country_id.id))
我认为您需要使用 country name
进行排序。
使用您的最后一行代码并调用一次排序将解决问题:
partners.sorted(key=lambda r: (r.name, r.country_id.name))
我有一个合作伙伴记录集。现在我想按两个属性对这个记录集进行排序。其中一个属性是简单的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
)。
我也试过link两个排成一行,这样:
partners.sorted(key=lambda r: r.name).sorted(key=lambda r: r.country_id.id)
但它也不起作用,因为第二个 sorted
函数弄乱了第一个函数的结果。
谁能帮我解决这个问题?
那
呢partners.sorted(key=lambda p: (p.name, p.country_id.id))
我认为您需要使用 country name
进行排序。
使用您的最后一行代码并调用一次排序将解决问题:
partners.sorted(key=lambda r: (r.name, r.country_id.name))