我有合作伙伴的记录集。现在我想通过两个属性来排序这个记录集。其中一个属性是一个简单的 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 函数弄乱了第一个的结果。

    任何人都可以帮我解决这个问题吗?

    最佳答案

    关于什么

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

    关于python - 如何在Odoo 8中按两个字段排序?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39270278/

    10-11 08:58