odoo Actions学习总结
环境
odoo-14.0.post20221212.tar
Actions(动作)
action定义系统响应用户操作的行为:登录、操作按钮、选择发票等…
action可以存储在数据库中,也可以作为字典直接返回,例如按钮方法。所有Action都有两个强制属性:
-
type当前Action的类别,决定可以使用哪些字段以及如何解释action
-
nameaction的名称,在客户端的界面中显示对action的简短用户可读描述
Bindings(绑定)
除了两个强制属性外,所有action有用于在任意模型的上下文菜单中显示动作的可选属性:
-
binding_model_id指定action绑定的模型,格式:
moduleName.modelName。注解对于“Server Actions”,请使用model_id -
binding_type指定绑定的类型,主要是放置action的上下文菜单
-
action(默认)设置Action将出现在绑定模型的
Action上下文菜单。 -
report设置Action将出现在绑定模型的
Print上下文菜单。
-
-
binding_view_types以逗号分隔的视图类型列表,即Action需要显示的上下文菜单所在的视图,主要是“列表”和“表单”。默认为
list,form(列表和表单)
Window Actions (ir.actions.act_window)
最常见的动作类型,用于通过视图呈现模型的可视化:Window Action为模型定义了一组视图类型(以及可能的特定视图)(以及可能特定的模型记录)。
包含字段:
-
res_modelaction触发的要显示的视图关联的模型
-
views(view_id,view_type)对的列表。每对视图的第二个元素是视图的类别(tree,form,graph, ……),第一个元素是可选的数据库id(或False)。如果未提供id,则客户端应获取所请求模型的指定类型的默认视图(这由fields_view_get()自动完成)。列表的第一种类型是默认视图类型,在执行操作时默认打开。每个视图类型在列表中最多应出现一次。当action配置如下时,打开的依旧是tree视图,也就说view_mode似乎是如下文所述,type为ir.actions.act_window的情况下,被忽略了,不起作用{ 'type': 'ir.actions.act_window', 'views': [[False, "tree"], [False, "form"]], 'view_mode': 'form', #... } -
res_id(可选)如果默认视图为
form,指定需要加载的记录(否则创建一个条新记录) -
search_view_id(可选)(id, name)对,id为动作需要加载的指定搜索视图的数据库ID。默认获取模型的默认搜索视图。 -
target(可选)视图是否应在主内容区域(
current)、以全屏模式(fullscreen)或对话框/弹出窗口(new)中打开。使用main而不是current以清除导航面包屑(实际发现,使用current会导致面导航面包屑不断重复,形如 顾客信息/导入记录/顾客信息/导入数据/...)。默认为new。 -
context(可选)传递给视图的附加上下文
-
domain(可选)隐式添加到所有视图搜索查询的过滤domain
-
limit(可选)默认情况下要在列表中显示的记录数。在web客户端中默认为80
-
name(可选),action名称,界面显示时拼接到当前面包屑导航(现有导航面包屑 /name值)。默认值为“Unnamed”,注意:如果name值为空字符串,则默认为Unnamed
例如,要使用列表和表单视图打开客户(设置了customer标志的partner):
{
"type": "ir.actions.act_window",
"res_model": "res.partner",
"views": [[False, "tree"], [False, "form"]],
"domain": [["customer", "=", true]],
}
或者在新对话框中打开特定产品的表单视图(单独获取):
{
"type": "ir.actions.act_window",
"res_model": "product.product",
"views": [[False, "form"]],
"res_id": a_product_id,
"target": "new",
}
另一个例子,在当前页面中打开estate.customer模块的默认列表视图
{
'type': 'ir.actions.act_window',
'name': _('导入数据'),
'res_model': 'estate.customer',
'views': [[False, "tree"]],
'view_mode': 'tree',
'context': self._context,
'target': 'main'
}
参考连接:
在数据库window action中,操作有几个不同的字段,这些字段应被客户端忽略,主要用于组成view列表
-
view_mode(默认=tree,form)以逗号分隔的视图类型列表,格式为字符串(注意不要包含空格)。所有这些类型都必须在生成的
views列表中(至少有一个Falseview_id) -
view_idsM2M(技术上不是M2M:添加了一个
sequence字段,可以只由一个视图类型组成,没有视图id) to view objects,定义views的初始内容。注解:Act_window视图也可以通过
ir.actions.Act_window.view干净地定义。如果您计划为模型允许多个视图,优先使用ir.actions.cact_window.wiew而不是view_idsaction。<record model="ir.actions.act_window.view" id="test_action_tree"> <field name="sequence" eval="1"/> <field name="view_mode">tree</field> <field name="view_id" ref="view_test_tree"/> <field name="act_window_id" ref="test_action"/> </record> -
view_id添加到
views列表中的特定视图,以防其类型是view_mode列表的一部分,并且尚未由view_ids中的某个视图填充
这些主要用于从数据文件定义action:
<record model="ir.actions.act_window" id="test_action">
<field name="name">A Test Action</field>
<field name="res_model">some.model</field>
<field name="view_mode">graph</field>
<field name="view_id" ref="my_specific_view"/>
</record>
将使用“my_specific_view”视图,即使这不是模型的默认视图。
views序列的服务器端组成如下:
- 从
view_ids获取每个(id, type)(按sequence排序) - 如果定义了
view_id,并且其类型尚未被填充,则追加其(id,type) - 对于
view_mode中的每个未填充类型,追加(False,type)
应用实践举例
在estate模块的estate.property模型的表单视图中,为Action添加菜单"选取offers",如下:

action配置:
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<data>
<record id="action_demo_wizard" model="ir.actions.act_window">
<field name="name">选取offers</field>
<field name="res_model">demo.wizard</field>
<field name="type">ir.actions.act_window</field>
<field name="view_mode">form</field>
<field name="target">new</field>
<field name="binding_model_id" ref="estate.model_estate_property"/>
<field name="binding_view_types">form</field>
</record>
</data>
</odoo>
参考连接
https://www.odoo.com/documentation/14.0/zh_CN/developer/reference/addons/actions.html
作者:授客
微信/QQ:1033553122
全国软件测试QQ交流群:7156436
Git地址:https://gitee.com/ishouke
友情提示:限于时间仓促,文中可能存在错误,欢迎指正、评论!
作者五行缺钱,如果觉得文章对您有帮助,请扫描下边的二维码打赏作者,金额随意,您的支持将是我继续创作的源动力,打赏后如有任何疑问,请联系我!!!
微信打赏
支付宝打赏 全国软件测试交流QQ群
浙公网安备 33010602011771号