网站建设合同需注意什么杭州旺道企业服务有限公司
在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, apiclass SalesAnalysisReport(models.Model):_name = 'report.sales.analysis'@api.modeldef refresh_report_data(self, args):"""刷新报表数据"""# 这里实现数据刷新逻辑self.env.cr.execute("""-- 更新数据的SQL语句""")return True
5. 注册前端资源
在 manifest.py 中注册前端资源:
{'name': '自定义透视表功能','data': ['views/assets.xml',],# 其他manifest配置...
}
实现效果
- 在销售分析透视图中会出现"数据刷新"按钮
- 点击按钮会调用后台 refresh_report_data 方法
- 方法执行完成后自动刷新页面
- 在其他透视图中该按钮会自动隐藏
注意事项
- 确保前端JS中模型名称与后台Python模型名称一致
- 按钮权限控制需要在Python方法中实现
- 长时间运行的操作应考虑使用队列处理
通过这种方式,我们可以灵活地为Odoo标准视图添加各种自定义功能,满足业务需求。