You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Odoo 11的read_group是否与Odoo 12具备同等聚合查询功能?

Odoo 11 read_group聚合查询问题解答

首先可以确定的是,Odoo 11的read_group方法本身是支持sum、avg这类聚合计算的,你遇到的问题是代码写法有误,同时存在逻辑笔误。

问题1:聚合字段定义格式错误

Odoo 11的read_group聚合字段不需要手动写自定义别名前缀,正确的字段列表写法是直接声明要聚合的字段和计算函数,别名由ORM自动生成:

grouped_result = self.env['account.invoice'].read_group(
    invoices_partner_domain,
    ['partner_id', 'amount_total:sum', 'amount_total:avg'],
    ['partner_id']
)

调用后返回的结果中,sum聚合结果对应键名为amount_total,avg聚合结果对应键名为amount_total_avg。

如果你一定要用自定义别名,Odoo 11也支持,不过写法需要调整为别名:字段名:聚合函数的格式,示例如下:

['partner_id', 'sum_total:amount_total:sum', 'avg_total:amount_total:avg']

你之前的写法把聚合函数的位置放错了,ORM识别不了所以没有返回对应的聚合值。

问题2:返回值存在笔误

你原有代码的返回值写了两个相同的sum_total键,会导致后面的值覆盖前面的值,正确的取值写法应该是:

if grouped_result:
    return {
        'sum_total': grouped_result[0]['sum_total'],
        'avg_total': grouped_result[0]['avg_total'],
    }
return None

额外优化建议

你的查询条件已经固定了partner_id为当前记录关联的客户,实际不需要按partner_id分组,分组维度可以直接传空列表,性能更高也更贴合你的原生SQL逻辑(你的原生SQL本身没有GROUP BY,只是按条件聚合所有匹配记录):

grouped_result = self.env['account.invoice'].read_group(
    invoices_partner_domain,
    ['sum_total:amount_total:sum', 'avg_total:amount_total:avg'],
    []
)

按照以上修改后,不需要写原生SQL,直接用Odoo 11自带的read_group方法就能实现你的需求。

内容的提问来源于stack exchange,提问作者Wellington Souza

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 08:54:03