我想在ORM的搜索方法中应用len(one2many_field)
。像这样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
答案 0 :(得分:1)
如果我理解正确,您希望能够进行查询,例如向我显示所有具有三个或更多订单行的销售订单(例如)。我在这里使用销售订单和销售订单行作为示例,但只是替换您正在使用的任何父/子模型。
在搜索中使用if:
sale_order_model.search(cr,uid,[(' my_count_field','> =',3)],context = context)
这里唯一棘手的部分是让商店触发器正确,但销售订单金额就是一个很好的例子。
答案 1 :(得分: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