pythonodoo

odoo12 的分组查询

2019-12-27  本文已影响0人  隔壁小红馆
def read_group(self, domain, fields, groupby, offset=0, limit=None, orderby=False, lazy=True):

针对read_group方法的不同可用参数如下:

self.env['sale.order'].read_group([], ['partner_id', 'amount_total:avg'], ['partner_id'])
self.env['sale.order'].read_group([], ['partner_id', 'total:sum(amount_total)', 'avg_total:avg(amount_total)'], ['partner_id'])

以下是read_group方法所支持的参数列表:

扩展知识…
对date字段分组会比较复杂,因为可以根据日、周、季度、月或年来对记录进行分组。可以通过在groupby参数的 : 后传递groupby_function来改变日期的分组行为。如果想要对销售订单的月汇总进行分组,可以使用下面的read_group方法:

self.env['sale.order'].read_group([], ['total:sum(amount_total)'], ['order_date:month'])

这是一段自己写的在 sale.order 表里按人员进行分组,在一定的时间内,然后按 amount_total 大小排序

sale_order = self.env['sale.order'].read_group(domain=[('confirmation_date', '>=', date_start), ('confirmation_date', '<=', date_end)],fields=['partner_id', 'confirmation_date', 'amount_total'],groupby=['partner_id'])
mapped_data = dict([(m['partner_id'][1], m['amount_total']) for m in sale_order])
d_order = sorted(mapped_data.items(), key=lambda x: round(x[1], 2), reverse=True)[:number]
print(d_order)
上一篇 下一篇

猜你喜欢

热点阅读