如何在树视图标题中创建一个按钮(在创建和导入按钮旁边)并赋予它功能?在odoo 9

时间:2017-04-10 11:05:19

标签: openerp odoo-9 qweb

我正在尝试在销售订单模块的树形视图中添加一个按钮,旁边是创建导入按钮。该按钮将执行python方法。

我创建了自定义模块,扩展了销售订单模块,然后,我按照以下步骤操作:

第1步:在my_module / static / src / xml / qweb.xml中创建按钮:

<?xml version="1.0" encoding="UTF-8"?>
<templates id="template" xml:space="preserve">
  <t t-extend="ListView.buttons">
    <t t-jquery="button.o_list_button_add" t-operation="after">
      <t t-if="widget.model=='sale.order'">
        <button class="btn btn-sm btn-primary update_sales_button" type="button">Run my stuff</button>
      </t>
    </t>
  </t>
</templates>

第2步:将文件添加到我模块的__openerp.py__中的qweb部分:

'depends': ['sale'],
'data': [],
'qweb': ['static/src/xml/qweb.xml'],

现在,按钮出现。

第3步:创建python方法,为my_module / my_python_file.py中的按钮提供功能:

from openerp import api, fields, models, _

class SaleOrderExtended(models.Model):
  _inherit = ['sale.order']

  @api.multi
  def update_sales_button(self):
    ...

注意: python方法已经在odoo之外进行了测试,并且工作正常。

如何将此python方法与按钮链接?

2 个答案:

答案 0 :(得分:3)

您需要扩展&#39; ListView&#39; 小部件,添加点击侦听器。 同时将&#39; @ api.model&#39; 装饰器添加到您的方法中,这样您就可以通过&#39;调用&#39; 从js中调用它方法。 像这样:

ListView = require('web.ListView')

ListView.include({
    render_buttons: function() {

        // GET BUTTON REFERENCE
        this._super.apply(this, arguments)
        if (this.$buttons) {
            var btn = this.$buttons.find('.update_sales_button')
        }

        // PERFORM THE ACTION
        btn.on('click', this.proxy('do_new_button'))

    },
    do_new_button: function() {

        instance.web.Model('sale.order')
            .call('update_sale_button', [[]])
            .done(function(result) {
                < do your stuff, if you don't need to do anything remove the 'done' function >
            })
})

答案 1 :(得分:0)

我正在使用odoo 11,我必须在主题入门者的模板中用widget.model替换widget.modelName(前者是一个对象,后者是一个字符串)。另外,要将按钮附加到行尾,我在查找父div时将t-operation更改为"append"

<t t-extend="ListView.buttons">
    <t t-jquery="div.o_list_buttons" t-operation="append">
        <t t-if="widget.modelName=='sale.order'">
            <button class="btn btn-sm btn-default import_email_button" type="button">
                Import E-mail Order
            </button>
        </t>
    </t>
</t>