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

Odoo技术求助:如何修改透视表筛选器的分组显示值?

透视表分组标签自定义为区间格式解决方案

针对你遇到的透视表分组标签从数字0/1/2改为“1M - 2M”这类区间格式的问题,提供两个可行方向:

1. 后端模型重写数据处理逻辑

在你的透视表报表模型中,重写_get_report_values方法,对分组后的键值进行替换:

def _get_report_values(self, docids, data=None):
    res = super(YourReportModel, self)._get_report_values(docids, data=data)
    # 假设透视表分组数据存储在res['pivot_data']中,根据实际结构调整
    if 'pivot_data' in res:
        # 定义数字分组到区间标签的映射
        group_map = {
            0: "1M - 2M",
            1: "2M - 3M",
            2: "3M - 4M",
            # 按你的分组规则补全到20对应的区间
            20: "21M - 22M"
        }
        # 遍历替换分组键
        for old_key in list(res['pivot_data'].keys()):
            if old_key in group_map:
                new_key = group_map[old_key]
                res['pivot_data'][new_key] = res['pivot_data'].pop(old_key)
    return res

注意:如果你的透视表数据结构不同(比如嵌套分组),需要调整遍历和替换的逻辑,确保定位到目标分组的键。

2. 前端JS修改渲染后的标签

如果后端修改无效,可通过前端JS监听透视表渲染事件,替换页面上的分组文本:

第一步:添加自定义JS资源

在模块的XML视图中引入自定义JS文件:

<template id="custom_pivot_assets" inherit_id="web.assets_backend">
    <xpath expr="." position="inside">
        <script type="text/javascript" src="/your_module_name/static/src/js/pivot_label_fix.js"></script>
    </xpath>
</template>

第二步:编写JS逻辑

在pivot_label_fix.js中写入以下代码:

odoo.define('your_module_name.pivot_label_fix', function(require) {
    "use strict";

    var PivotController = require('web.PivotController');

    PivotController.include({
        renderButtons: function() {
            this._super.apply(this, arguments);
            // 监听透视表头部单元格渲染
            this.$el.on('DOMNodeInserted', '.o_pivot_header_cell', function() {
                const $cell = $(this);
                const originalText = $cell.text().trim();
                // 定义数字到区间的映射
                const labelMap = {
                    '0': '1M - 2M',
                    '1': '2M - 3M',
                    // 补全所有分组对应的映射
                    '20': '21M - 22M'
                };
                if (labelMap[originalText]) {
                    $cell.text(labelMap[originalText]);
                }
            });
        }
    });
});

关键提示

之前使用depends未生效,大概率是因为方法没有绑定到透视表数据生成的正确流程上,或者depends的字段与分组逻辑无关。优先尝试后端重写方法,若透视表是前端动态渲染的,再用JS方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 23:31:23