如何在树视图 header 中创建按钮(在创建和导入按钮旁边)并赋予它功能?在 odoo 9
How to create a button in the tree view header (next to create and import buttons) and give it functionality? In odoo 9
我正在尝试在 销售订单 模块的树视图中添加一个按钮,在 create 和 旁边导入 按钮。该按钮将执行 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 外部测试并且工作正常。
如何使用按钮 link 这个 python 方法?
您需要扩展 'ListView' 小部件,添加点击侦听器。
还要将 '@api.model' 装饰器添加到您的方法中,这样您就可以使用 'call' 从 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 >
})
})
我正在使用 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>
我正在尝试在 销售订单 模块的树视图中添加一个按钮,在 create 和 旁边导入 按钮。该按钮将执行 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 外部测试并且工作正常。
如何使用按钮 link 这个 python 方法?
您需要扩展 'ListView' 小部件,添加点击侦听器。 还要将 '@api.model' 装饰器添加到您的方法中,这样您就可以使用 'call' 从 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 >
})
})
我正在使用 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>