【问题标题】:How to order by two fields in Odoo 8?如何在 Odoo 8 中按两个字段排序?
【发布时间】:2016-09-01 11:26:01
【问题描述】:

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

谁能帮帮我,好吗?

【问题讨论】:

    标签: python python-2.7 odoo-8 odoo


    【解决方案1】:

    怎么样

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

    【讨论】:

      【解决方案2】:

      我认为您需要使用 country name 进行排序。
      使用您的最后一行代码并调用一次 sort 即可解决问题:

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

      【讨论】:

      • 非常感谢@Kenly,这行得通,但不必按国家/地区订购name,我可以按国家/地区订购id 没有问题。
      猜你喜欢
      • 2011-06-15
      • 1970-01-01
      • 2021-08-18
      • 1970-01-01
      • 2018-09-11
      • 2019-03-19
      • 1970-01-01
      • 1970-01-01
      • 2018-05-12
      相关资源
      最近更新 更多