当前位置: 首页 > news >正文

Odoo透视图中添加自定义按钮执行后台方法

在Odoo开发中,我们经常需要在标准视图上添加自定义功能按钮。本文将演示如何在Pivot透视图中添加一个"数据刷新"按钮,点击后执行后台Python方法并刷新页面。

实现原理

通过扩展标准Pivot视图,添加自定义按钮并绑定点击事件,调用后台模型的Python方法。

实现步骤

1. 创建XML模板添加按钮

首先在custom_pivot_view.xml中扩展标准Pivot视图的按钮区域:

<?xml version="1.0" encoding="UTF-8"?>
<templates id="custom_pivot_template" xml:space="preserve">
    <t t-extend="PivotView.buttons">
        <t t-jquery="div.btn-group-sm:has(button.o_pivot_download)" t-operation="after">
            <div class="btn-group btn-group-sm" style="margin-left: 5px;">
                <button class="btn btn-primary btn_refresh_data" type="button">
                    数据刷新
                </button>
            </div>
        </t>
    </t>
</templates>

2. 编写JavaScript处理按钮逻辑

在 custom_pivot_view.js 中处理按钮的显示逻辑和点击事件:

odoo.define('custom_module.pivot_button', function (require) {
    "use strict";

    var PivotView = require('web.PivotView');
    var Model = require('web.Model');

    PivotView.include({
        render_buttons: function ($node) {
            this._super($node);
            var currentModel = this.model;
            
            if (currentModel === 'report.sales.analysis') {
                this.$buttons.find('.btn_refresh_data').on('click', function () {
                    var reportModel = new Model('report.sales.analysis');
                    reportModel.call('refresh_report_data', [{}]).then(function () {
                        location.reload();
                    }).fail(function (error) {
                        console.error('刷新失败:', error);
                    });
                });
            } else {
                this.$buttons.find('.btn_refresh_data').hide();
            }
        }
    });
});

3. 添加CSS样式(可选)

在 custom_pivot_view.css 中添加按钮样式:

.o_pivot_view .btn_refresh_data {
    margin-right: 8px;
}

4. 后台Python方法实现

在对应的模型中添加处理方法:

from odoo import models, api

class SalesAnalysisReport(models.Model):
    _name = 'report.sales.analysis'
    
    @api.model
    def refresh_report_data(self, args):
        """刷新报表数据"""
        # 这里实现数据刷新逻辑
        self.env.cr.execute("""
            -- 更新数据的SQL语句
        """)
        return True

5. 注册前端资源

manifest.py 中注册前端资源:

{
    'name': '自定义透视表功能',
    'data': [
        'views/assets.xml',
    ],
    # 其他manifest配置...
}

实现效果

  1. 在销售分析透视图中会出现"数据刷新"按钮
  2. 点击按钮会调用后台 refresh_report_data 方法
  3. 方法执行完成后自动刷新页面
  4. 在其他透视图中该按钮会自动隐藏

注意事项

  1. 确保前端JS中模型名称与后台Python模型名称一致
  2. 按钮权限控制需要在Python方法中实现
  3. 长时间运行的操作应考虑使用队列处理
    通过这种方式,我们可以灵活地为Odoo标准视图添加各种自定义功能,满足业务需求。

相关文章:

  • Python学习(二)操作列表
  • 字体格式如何解析(open-type)
  • Mysql 字段值批量自增或自减(坐标系数据,(x,y))
  • 43页可编辑PPT | 大数据管理中心设计规划方案大数据中心组织架构大数据组织管理
  • ⑧RBM(主备/主主)-二层部署案例
  • Web3.0隐私计算与云手机的结合
  • AI Agent 中的 MCP 模型上下文协议详解
  • 基于Matlab实现DCT数字水印添加提取和干扰测试
  • scGPT环境安装
  • 2025年企业级开源治理实践与思考
  • 边缘计算网关是什么?
  • JavaScript 深拷贝:手写一个简单可靠的 `deepClone` 函数
  • 2025华为软件精英挑战赛2600w思路分享
  • 互联网 Java 面试八股文汇总(2025 最新整理,持续更新)
  • 装饰器模式详解
  • 智能体项目实现AI对话流式返回效果
  • WebSocket原理详解(二)
  • 数据分析与应用3------数据清洗
  • 通过 Linux 网络命名空间实现路由器的方案与案例
  • PaddleX上线小目标检测模型产线,支持遥感分析、智能监控、智慧交通等领域高效应用
  • 东洋学人|滨田青陵:近代日本考古学第一人
  • 普雷沃斯特当选新一任天主教罗马教皇
  • 5月12日至13日北京禁飞“低慢小”航空器
  • 中国海警依法驱离日非法进入我钓鱼岛领海船只
  • 成都公积金新政征求意见:购买保障性住房最高贷款额度上浮50%
  • 太空摄影的发展