odoo里面的动作

来源: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>

 

posted @   何双新  阅读(402)  评论(1编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
历史上的今天:
2019-09-08 odoo学习笔记create函数
点击右上角即可分享
微信分享提示