odoo14在tree视图的表头增加按钮调用后端方法

odoo在form视图上增加按钮是比较方便的,但是tree视图就麻烦一些,需要借助js来实现

我对js不太熟悉,此处为同事帮忙做的,可能有解释不到位的情况,请谅解

这是我同事的地址,大家可以去看一下,写的很好

koron7的博客_CSDN博客-odoo,python,泛微E9领域博主

1. 首先在模块文件的static/src/js下增加要添加的js文件:

odoo14在tree视图的表头增加按钮调用后端方法_第1张图片

 js代码如下

odoo.define('receipt_follow_up.btn_confirm_submission', function (require) {
    "use strict";
    var ListController = require('web.ListController');
    ListController.include({
        renderButtons: function () {
            this._super.apply(this, arguments);
            if (this.$buttons) {
                var btn = this.$buttons.find('.receipt_follow_up_btn_confirm_submission');
                btn.on('click', this.proxy('receipt_follow_up_btn_confirm_submission'));
            }
        },

        receipt_follow_up_btn_confirm_submission: function () {
            var self = this;
            var records = this.getSelectedIds();
            self._rpc({
                model: 'receipt.follow.up',
                method: 'btn_confirm_submission',
                args: [records],
            }).then(function () {
                self.update({}, { reload: true });
            });
        },
    });
});

首先定义 var btn = this.$buttons.find('.receipt_follow_up_btn_confirm_submission');

这里find里的内容是自己定义的,用作区分

然后绑定click事件  btn.on('click', this.proxy('receipt_follow_up_btn_confirm_submission'));

随后在方法中定义tree中选择的记录var records = this.getSelectedIds();

然后调用rpc,其中model就是后端你定义的模型了,method就是要调用的方法,args传入选择的记录集,此时js内容完成

2.在static/src/xml下增加对应的xml文件来降按钮放到指定位置

odoo14在tree视图的表头增加按钮调用后端方法_第2张图片

xml内容如下



    
      
          
     
    

打开要加按钮的tree查看对应位置的官方原生按钮的class,例如我的是放到了保存按钮的前边,而保存按钮的类为 o_list_button_save,所以 

这里的t-jquery后边指定到o_list_button_save类,然后t-operation="before"是降我定义的按钮放到它的前边,当然也可以写成after

odoo14在tree视图的表头增加按钮调用后端方法_第3张图片

3.在views目录下增加一个xml文件用来加载js文件: