python - Odoo 9 如何在自定义按钮上创建操作

标签 python odoo odoo-8 odoo-9

我已经能够使用 xml 创建自定义按钮Add Bro

enter image description here

这是 xml

<templates>
  <tr t-extend="ListView.buttons">
    <t t-jquery="button.o_list_button_add" t-operation="after">
        <button id="tahu" name="action" type="object" class="btn btn-sm btn-primary">
            Add Bro
        </button>
    </t>
  </tr>
</templates>

我的问题是,如何为该按钮创建操作,当我点击按钮时将调用该操作。我尝试过使用名称 action 创建方法,因此它对按钮的 name 属性进行数学运算,但什么也没发生。

@api.multi
def action(self):
    view_ref = self.env['ir.model.data'].get_object_reference('account', 'invoice_form')
    view_id = view_ref[1] if view_ref else False

    res = {
       'type': 'ir.actions.act_window',
       'name': _('Customer Invoice'),
       'res_model': 'purchase.order',
       'view_type': 'form',
       'view_mode': 'form',
       'view_id': view_id,
       'target': 'new',
       # 'context': {'default_partner_id': client_id}
    }

    return res

最佳答案

您需要扩展 ListView 小部件并向按钮添加触发器:

openerp.you_module_name_here = function(instance){

    var _t = instance.web._t,
        _lt = instance.web._lt;
    var QWeb = instance.web.qweb;

    instance.web.ListView.include({

        load_list: function(data) {
            if (this.$buttons) {
                this.$buttons.find('#tahu').click(this.proxy('action')) ;
            }
        },

        action: function () {
            var model_obj = new instance.web.Model('ir.model.data');
            view_id = model_obj.call('get_object_reference', ["account", "invoice_form"]);

            this.do_action(
                name:  _t('Customer Invoice'),
                type: 'ir.actions.act_window',
                res_model: 'purchase.order',
                view_type: 'form',
                view_mode: 'form',
                view_id: view_id,
                target: 'new'
                );
        }
    });
}

/static/src/js/ 下创建一个包含上述代码的 js 文件 (script.js) 和一个 xml 文件 (`module_view.xml) 包含以下代码:

<template id="assets_backend_custom" name="custom assets" inherit_id="web.assets_backend">
    <xpath expr="." position="inside">
        <script type="text/javascript" src="/your_module_name_here/static/src/js/script.js"></script>
        </xpath>
</template>

__openerp__.py:

...

'data': [
    ...

    "module_view.xml",

    ...
],

...

关于python - Odoo 9 如何在自定义按钮上创建操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37322701/

相关文章:

python - 如何将零向量添加到 Pandas DataFrame?

odoo - 如何标准化 Odoo 8 中创建或写入时的字段值?

python - 如何从odoo 8中的orm获取数据库值和从字符串获取字段名称

postgresql - 我在哪里可以找到 openERP 数据库中的 'project name'?

python - Odoo 在模块更新后不添加新的 XML 文件

python - 在模块安装中设置 Odoo 的配置设置

python - 更新 django 项目、跟踪更新的最佳方法

python - Django:对 (\d+) 的解释

python - 解码 Base64 编码时填充错误错误

testing - 适用于 odoo 的自动化测试工具