odoo Actions学习总结

简介: odoo Actions学习总结

环境

odoo-14.0.post20221212.tar

Actions(动作)

action定义系统响应用户操作的行为:登录、操作按钮、选择发票等…

action可以存储在数据库中,也可以作为字典直接返回,例如按钮方法。所有Action都有两个强制属性:

  • type
    当前Action的类别,决定可以使用哪些字段以及如何解释action
  • name
    action的名称,在客户端的界面中显示对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_model
    action触发的要显示的视图关联的模型
  • views
    (view_id,view_type)对的列表。每对视图的第二个元素是视图的类别(treeformgraph, ……),第一个元素是可选的数据库id(或False)。如果未提供id,则客户端应获取所请求模型的指定类型的默认视图(这由 fields_view_get()自动完成)。列表的第一种类型是默认视图类型,在执行操作时默认打开。每个视图类型在列表中最多应出现一次。当action配置如下时,打开的依旧是tree视图,也就说view_mode似乎是如下文所述,typeir.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'
}

参考连接:

https://www.odoo.com/documentation/14.0/zh_CN/developer/howtos/web.html?highlight=do_action#the-action-manager

在数据库window action中,操作有几个不同的字段,这些字段应被客户端忽略,主要用于组成view列表

  • view_mode (默认= tree,form )
    以逗号分隔的视图类型列表,格式为字符串(注意不要包含空格)。所有这些类型都必须在生成的views列表中(至少有一个Falseview_id
  • view_ids
    M2M(技术上不是M2M:添加了一个sequence字段,可以只由一个视图类型组成,没有视图id) to view objects,定义views的初始内容。
    注解:Act_window视图也可以通过ir.actions.Act_window.view干净地定义。如果您计划为模型允许多个视图,优先使用ir.actions.cact_window.wiew而不是view_ids action。
<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",如下:

![image-20230117111309634](images/odoo Actions学习总结/image-20230117111309634.png)

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

目录
相关文章
|
存储 NoSQL 数据库
时序数据库连载系列: 时序数据库一哥InfluxDB之存储机制解析
InfluxDB 的存储机制解析 本文介绍了InfluxDB对于时序数据的存储/索引的设计。由于InfluxDB的集群版已在0.12版就不再开源,因此如无特殊说明,本文的介绍对象都是指 InfluxDB 单机版 1. InfluxDB 的存储引擎演进 尽管InfluxDB自发布以来历时三年多,其存储引擎的技术架构已经做过几次重大的改动, 以下将简要介绍一下InfluxDB的存储引擎演进的过程。
7032 0
|
网络协议
一文彻底搞定TCP协议的三次握手和四次挥手
通过本章的探险,你将学会如何TCP协议的三次握手和四次挥手
|
11月前
|
人工智能 自然语言处理 语音技术
《ModelScope:模型即服务的创新与未来》
【10月更文挑战第2天】** 本文深入探讨了 ModelScope 所代表的模型即服务(MaaS)模式的发展背景、核心特点、技术优势、应用场景以及对各个领域带来的深远影响。通过对其架构、功能和实际案例的分析,展现了 ModelScope 在推动人工智能发展、促进产业升级和创新方面的巨大潜力,同时也对其未来发展趋势进行了展望。
851 1
|
搜索推荐 项目管理 开发工具
odoo是啥
【6月更文挑战第23天】odoo是啥
658 3
|
机器学习/深度学习 算法 计算机视觉
【博士每天一篇文献-算法】Learning without forgetting
本文提出了一种名为"无忘记学习"(Learning without Forgetting, LWF)的算法,它允许在不牺牲原有任务性能的情况下,通过仅使用新任务的数据来训练卷积神经网络以学习新的视觉能力。
189 0
【博士每天一篇文献-算法】Learning without forgetting
|
消息中间件 存储 NoSQL
Redis 从入门到精通之Redis 订阅与发布
Redis 是一个支持发布/订阅模式的高性能内存数据库,支持订阅频道和模式。在 Redis 中,客户端可以订阅一个或多个频道或模式,然后接收发布到这些频道或模式的消息。下面将介绍 Redis 中订阅与发布相关的命令和操作
627 63
Redis 从入门到精通之Redis 订阅与发布
|
弹性计算 编解码 人工智能
阿里云发布企业云原生IT成本治理方案:五大能力加速企业 FinOps 进程
阿里云企业云原生 IT 成本治理方案助力企业落地企业 IT 成本治理的理念、工具与流程,让企业在云原生化的过程中可以数字化地实现企业 IT 成本管理与优化,成为 FinOps 领域的践行者与领先者。
阿里云发布企业云原生IT成本治理方案:五大能力加速企业 FinOps 进程
|
SQL 关系型数据库 MySQL
explain是什么?explain优缺点及如何使用explain优化SQL
explain是什么?explain优缺点及如何使用explain优化SQL
433 1
|
数据库 数据安全/隐私保护 开发者
Odoo 15开发手册第一章 使用开发者模式快速入门
Odoo提供了一个快速应用开发框架,尤其适合构建商业应用。这类应用通常用于保存业务记录和工作流。Odoo 不仅简化了这类应用的构建,还提供了看板、日历、图表等视图的丰富组件,用于创建难以抗拒的用户界面。
1055 3
Odoo 15开发手册第一章 使用开发者模式快速入门
|
API 索引
Elasticsearch Index Shard Allocation 索引分片分配策略
Elasticsearch Index Shard Allocation 索引分片分配策略
332 1