来源:Odoo中的五种action都是继承自ir.actions.actions模型实现的子类,共有五种,下面会一个一个给出具体例子
1、链接Action(ir.actions.act_url):target:self、main、new
def do_action_html(self): return { 'type': 'ir.actions.act_url', 'url': "http://www.baidu.com", 'target': 'main', 'res_id': self.id, }
2、窗口action(ir.actions.act_window ):用于打开模型的各种视图
def action_read_account(self): self.ensure_one() domain=[] context={} return { 'name': self.display_name, 'type': 'ir.actions.act_window', 'view_type': 'form', 'view_mode': 'form', 'domain': domain, 'context': context, 'view_mode': 'form', 'res_model': 'account.account', 'res_id': self.id, }
3、服务器Action (ir.actions.server)
<record id="action_product_price_list_report" model="ir.actions.server"> <field name="name">Generate Pricelist</field> <field name="groups_id" eval="[(4, ref('group_product_pricelist'))]"/> <field name="model_id" ref="product.model_product_product"/> <field name="binding_model_id" ref="product.model_product_product"/> <field name="state">code</field> <field name="code"> ctx = env.context ctx.update({'default_pricelist': env['product.pricelist'].search([], limit=1).id}) action = { 'name': 'Pricelist Report', 'type': 'ir.actions.client', 'tag': 'generate_pricelist', 'context': ctx, } </field> </record>
4、四:客户端Actions (ir.actions.client)
触发一个在客户端实现(即js文件中定义的函数,通过core.action_registry.add(tag,函数名) 注册到odoo中)动作
def execute(self): return { 'type': 'ir.actions.client', 'tag': 'reload', 'params': {'wait': True} }
注意:tag是对应js里面的一个action_registry
js代码模板
var 自定义widget名= Widget.extend({ init:init函数; start:自动调用到start函数; 其他函数,被init、start调用。//自定义widget,就是自定义动作 }) core.action_registry.add('widget tag名', widget名); return { widget名: widget名, };
xml里面
<record id="action_" model="ir.actions.client"> <field name="name"></field> <field name="res_model"></field> <field name="tag">widget注册时的tag名</field> </record>
5、报表渲染设置Action (ir.actions.report.xml) 此action用于在报表渲染前进行一些前置设定,如纸张大小、输出文件名等等
<record id="" model="ir.actions.report.xml"> <field name="name"></field> <field name="model">report.模块名.报表模型名</field> <field name="report_type">qweb-pdf|qweb-html</field> <field name="report_name">输出的报表文件名</field> </record>