0

我想应用len(one2many_field)ORM 的 in Search 方法。像这样search(..,order = "len(one2many_field)",..)。我想通过查找他们孩子的总数来订购结果。one2many 字段与同一个表有关系。目前我无法len()order.

例子 :

 id    name    parent_id
  1     A       - 
  2     B       1 
  3     C       1 
  4     D       - 
  5     E       4

结果 :

A
D
4

2 回答 2

1

如果我理解正确,您希望能够进行查询,例如向我显示具有三个或更多订单行的所有销售订单(例如)。我在这里使用销售订单和销售订单行作为示例,但只需替换您正在使用的任何父/子模型。

  1. 扩展销售订单并添加一个功能字段,该字段仅返回销售订单行数 one2many 字段。
  2. 使其成为触发的存储字段。看看这些金额是如何存储在销售订单上的。您几乎可以复制和粘贴它,但更改字段名称。
  3. 在搜索中使用 if:

    sale_order_model.search(cr, uid, [('my_count_field', '>=', 3)], context = context)

这里唯一棘手的部分是让商店触发器正确,但销售订单的金额对您来说是一个完美的例子。

于 2014-03-12T21:21:03.990 回答
0

我认为不可能在 orm 搜索方法的 order 参数上使用 len(),因为该参数必须是逗号分隔的有效字段名称列表。作为参考,用于构建 order by 子句的 openerp 代码(用于查询):

def _generate_order_by(self, order_spec, query):
        """
        Attempt to consruct an appropriate ORDER BY clause based on order_spec, which must be
        a comma-separated list of valid field names, optionally followed by an ASC or DESC direction.

        :raise" except_orm in case order_spec is malformed
        """
...

你会在下面找到这个:openerp-server.openerp.osv.orm.BaseModel

于 2014-03-12T09:18:17.070 回答