odoo的五种actions

转载自:添加链接描述

Odoo中的五种Action详解

Odoo中的五种action都是继承自ir.actions.actions模型实现的子类,共有五种。分别对应五种类型、五种用途。

odoo中还有其他含有action命名的模型,诸如:action.todo等,都不是actions的子类,不是动作;

odoo中翻译为动作的,也不全是action,例如:自动动作,它是ir.cron模型,执行服务器的定时任务。
一:窗口action(ir.actions.act_window )

最常用的action类型,用于打开模型的各种视图。

字段列表:

1:res_model

需要在view里显示数据的model。

2:view_type

代表视图类型如:form,tree,gragh...,type参数列表的第一个会被默认用来展示。

3:view_id

数据库视图记录id或False,如果没有指定id,客户端会自动用fields_view_get()获取相应类型的默认视图。

4:res_id (可选)

当默认的视图类型是form,并且模型定义了不止一个form视图时,可用red_id字段指定加载具体的form视图id

5:search_view_id (可选)

(id, name),id是储存在数据库的搜索视图id,默认会读取model的默认搜索视图

6:target (可选)

定义视图打开模式 在当前视图上打开(current)、使用全屏模式(fullscreen)、新窗口打开(new),可使用main代替current来清除面包屑导航[面包屑导航:让用户了解目前所处位置,以及当前页面在整个网站中的位置]

7:context (可选)

额外的需要传给要打开的视图的环境数据。

复制代码

1)模型有多个同种视图时,指定打开具体的视图
{'tree_view_ref':'模块.view_tree_XXX','form_view_ref':'模块.view_form_XXX'}
<field name="search_view_id" ref="view_search_XXX/>
2)在跳转的同时启用过滤器
{'search_default_过滤器名': [active_id]/True}

3)传递数据,可用于domain中作为表达式的值
{"key":value}

4)指定跳转过去的视图记录的分组方式
{'group_by': ['字段','...'];'group_by_no_leaf':1}

复制代码

8:domain (可选)

自动添加到搜索视图中的查询条件,即:跳转到目标视图时,立即应用domain条件过滤模型记录。

表达式中的值可以是具体的常量值,也可以是调用该action时传进来的context中的变量值。

[('字段', '=', '具体值'),('字段','=',上下文中的变量)]

context中的变量值有两种方式指定:

1)在python代码中调用action

复制代码

ctx = self._context.copy()
ctx.update({
'key': 值,
})
[action] = self.env.ref(action_name).read()
action['context'] = ctx
return action

复制代码

2)在action的context字段直接指定,不过一般都是明确的字面量值

//传递数据
{"key":value}

9:limit (可选)

在客户端显示的数据量,默认为80条。

10:auto_search(可选)

是否在加载默认视图后立即执行搜索,默认True

11:view_mode

以逗号分隔的视图类型列表,所有列举的类型的视图记录都会被加载。

12:view_ids

一般用于具体指定view_mode中列举类型的各种视图的具体记录。用法如下:



二:链接Action(ir.actions.act_url)

可以通过odoo的链接打开一个网站页面,可通过两个字段来自定义:

url -- 激活action时所打开的链接
target -- new:在新窗口打开,self:替换当前页面内容,默认new

用法:

1)视图上:通过点击菜单,打开链接

复制代码



网址
new



open

复制代码

2)python代码:可以作为按钮的点击函数,在函数中return一个链接action,打开链接

复制代码

return {
'type': 'ir.actions.act_url',
'url': 链接,
'target': 'self',
'res_id': self.id,
}

复制代码

三:服务器Action (ir.actions.server)

可以通过服务器action来触发复杂的服务端动作:

id -- 服务器action在数据库存储的id

context (可选) -- 额外的传递给服务器action作用目标的数据

model_id -- 与action相关联的model
condition (可选) -- 使用服务端的 evaluation contexts 来执行python代码,如果是False则阻止action执行,默认值是True
code -- 当调用action时执行的python代码

object_create -- 使用钩子创建一条新记录(通过调用模型的create或copy方法)

use_create
1.new - 基于指定的 model_id创建一条记录
2.new_other - 基于指定的crud_model_id创建一条记录
3.copy_current - 复制action所引用的记录
4.copy_other - 复制一个通过ref_object获得的记录

fields_lines --当创建或复制记录时需要修改的字段,One2many 会有以下字段:
1.col1 -- 在use_create里所包含的需要被重赋值的ir.model.fields
2.value -- 字段对应的值,基于type进行解析
3.type -- 取值value:就是value字段的值,取值equation:value字段会当成python来解析
crud_model_id -- 当use_create为new_other时,表示用于创建新记录的model id
ref_object -- 当use_create为copy_other时用于指定创建记录时引用的记录
link_new_record -- 是否用用link_field_id将新记录和当前记录进行many2one关联,默认False
link_field_id -- 指定当前记录与新记录进行many2one关联的字段

object_write -- 与object_create相似,不同的是 只修改当前记录而不创建新记录
use_create
1.current - 修改更新到当前记录
2.other - 修改更新到通过crud_model_id 或 ref_object指定的新记录
3.expression - 修改更新到通过crud_model_id 以及 write_expression筛选过后的记录
write_expression - 返回一条记录或对象id的python表达式
fields_lines,crud_model_id,ref_object与object_create一致

multi
将通过child_ids many2many关系定义的action一个个执行,如果有action自己返回action,最后一个action被返回给客户端作为将前multi action的下一个action

trigger 发送一个信号给工作流
wkf_transition_id - 用于触发的与workflow.transition有Many2one关系的id
use_relational_model - 如果是base(默认),则触发当前记录的维护信号;如果是relational,则触发通过wkf_model_id 和 wkf_field_id筛选出来的当前记录的字段

client_action -- 返回通过action_id定义的action

用法举例:

复制代码

//定义action


ir.actions.server


要执行的python代码。

//调用action
1)可以在界面上调用,作为按钮点击事件等

posted @ 2020-10-27 17:14  鹿哥  阅读(825)  评论(0)    收藏  举报