odoo16-python框架-动作

这篇具有很好参考价值的文章主要介绍了odoo16-python框架-动作。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

总结

1 模型和视图的 设计之美

view_ids, view_id,view_mode 最终目的都是为了生成views, 也就是视图.

模型是死的,像男人,一成不变

视图像女人,千变万化, 姿态万千

一阴一阳之谓道,设计之美又在这里得到了体现

2 所有的动作都可以通过web界面来配置

可以通过在"设置-技术-动作" 定义. 定义好之后会出现在对应模型的动作列表中

动作

动作定义了系统响应用户操作的行为比如,登录、操作按钮、选择发票、…

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

type

当前操作的类别决定了可以使用哪些字段以及如何解释操作

name

简短的用户可读的操作描述,可以显示在客户端界面中

客户端可以通过4种形式获得动作:

  • False 如果当前打开了任何操作对话框,关闭它
  • 字符换: 如果客户端action匹配,将其解释为客户端action的标记,否则将其视为数字
  • 数字: 从数据库中读取相应的动作记录,可以是数据库标识符或外部id
  • 字典: 将其视为客户端操作描述符并执行

1 绑定 Bindings

除了它们的两个强制属性,所有动作还共享可选属性,用于在任意模型的上下文菜单中显示动作:

1.1 binding_model_id

指定操作绑定到哪个模型

注意: 对于 Server Actions,使用model_id

1.2 binding_type

指定绑定的类型,主要是操作将出现在哪个上下文菜单下

action(default)

指定该动作将出现在绑定模型的action上下文菜单中。

report

指定该操作将出现在绑定模型的“打印”上下文菜单中。

这两个都是在form视图中才有的.

1.3 binding_view_types

一个逗号分隔的视图类型列表,操作将出现在上下文菜单中,主要是“list”和/或“form”。默认为列表,表单(列表和表单)

2 窗口动作(ir.actions.act_window)

最常见的动作类型,用于通过视图呈现模型的可视化:

  • 特定的视图类型,如tree.form
  • 特定的记录(通过domain来过滤)

有如下字段:

2.1 res_model

​ 视图对应的模型名称

2.2 views(*)

(view_id, view_type)对的列表。每对中的第二个元素是视图(tree、from、graph等)的类别,第一个元素是可选的数据库id(或False)。如果没有提供id,客户端应该为所请求的模型获取指定类型的默认视图(这是由fields_view_get()自动完成的)。列表的第一种类型是默认视图类型,在执行动作时默认打开。每种视图类型在列表中最多只能出现一次

2.3 res_id(可选的)

如果默认视图是form,则指定要加载的记录(否则应该创建一个新记录)

2.4 search_view_id (optional)

(id, name)对,id是要为操作加载的特定搜索视图的数据库标识符。默认为获取模型的默认搜索视图

2.5 target (optional)

视图是否应该在主内容区(current)、全屏模式(fullscreen)或对话框/弹出(new)中打开。使用main代替current来清除面包屑。默认为current。

经过测试: 对于URL ACTIONS来说,只有new可以用,其他都报错

2.6context (optional)

传递给视图的其他上下文数据

2.7 domain (optional)

过滤域以隐式添加到所有视图搜索查询

2.8 limit (optional)

默认情况下在列表中显示的记录数。在web客户端中默认为80

2.9 案例

打开合作伙伴中的消费者的视图:

{
    "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",
}

数据库存储的窗口动作有几个不同的字段,应该被客户端忽略,主要用于组成视图列表:

view_mode (default= tree,form )

以逗号分隔的视图类型列表(/!)\没有空格/!)。所有这些类型都将出现在生成的视图列表中(至少有一个False view_id)。

view_ids

M2M用于视图对象,定义了视图的初始内容

<record id="hr_leave_allocation_overtime_action" model="ir.actions.act_window">
    <field name="name">New Allocation Request</field>
    <field name="res_model">hr.leave.allocation</field>
    <field name="view_mode">form</field>
    <field name="view_ids" eval="[(5, 0, 0), (0, 0, {'view_mode': 'form', 'view_id': ref('hr_leave_allocation_overtime_view_form')})]"/>
    <field name="target">new</field>
</record>

又他们碰到eval了,这是啥意思呢?

注意 :

Act_window视图也可以通过ir.actions.act_window.view清晰地定义。

如果您计划为您的模型允许多个视图,最好使用ir.actions.act_window_view,而不是操作view_ids

<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>

这里有个实际的例子

<record id="hr_expense_actions_all" model="ir.actions.act_window">
<field name="name">Expenses Analysis</field>
<field name="res_model">hr.expense</field>
<field name="view_mode">graph,pivot,tree,form</field>
<field name="search_view_id" ref="hr_expense_view_search"/>
<field name="help" type="html">
<p class="o_view_nocontent_empty_folder">
No data yet!
</p><p>
Create new expenses to get statistics.
</p>
</field>
</record>

<record id="hr_expense_actions_all_graph" model="ir.actions.act_window.view">
<field name="view_mode">graph</field>
<field name="view_id" ref="hr_expense.hr_expense_view_graph"/>
<field name="act_window_id" ref="hr_expense_actions_all"/>
</record>

<record id="hr_expense_actions_all_pivot" model="ir.actions.act_window.view">
<field name="view_mode">pivot</field>
<field name="view_id" ref="hr_expense.hr_expense_view_pivot"/>
<field name="act_window_id" ref="hr_expense_actions_all"/>
</record>

<record id="hr_expense_actions_all_tree" model="ir.actions.act_window.view">
<field name="view_mode">tree</field>
<field name="view_id" ref="hr_expense_view_expenses_analysis_tree"/>
<field name="act_window_id" ref="hr_expense_actions_all"/>
</record>

view_id

指定一个特定的视图id, 它的类型在view_mode中, 并且没有在view_ids中被填充.

大多时候用于指定一个非默认视图

<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 "视图,即使那不是模型的默认视图。

视图序列的服务器端组成如下:

  • 从view_ids中获取each (id, type)(按顺序排序)
  • 如果view_id已经定义,并且它的类型还没有被填充,那么就添加它的(id, type)
  • 对于view_mode中每个未填充的类型,append (False, type)

view_ids, view_id,view_mode 最终目的都是为了生成views, 也就是视图.

模型是死的,像男人,一成不变

视图像女人,千变万化, 姿态万千

一阴一阳之谓道,设计之美又在这里得到了体现

3 URL动作(ir.actions.act_url)

允许通过Odoo操作打开URL(网站/网页)。可以通过两个字段进行定制:

3.1 url

动作时要打开的地址

3.2 target:

  • new 在新窗口/页面中打开该地址(默认值)
  • self 将当前内容替换为该页
{
    "type": "ir.actions.act_url",
    "url": "https://odoo.com",
    "target": "self",
}

4 服务器动作(ir.actions.server)

class odoo.addons.base.models.ir_actions.IrActionsServer(env, ids, prefetch_ids)[source]

服务器端的动作。服务器动作在基本模型上工作,并提供可以自动执行的各种类型的操作,例如使用基本操作规则,或者通过在“More”上下文菜单中手动添加操作。

从Odoo 8.0开始,在操作表单视图上增加了一个“创建菜单操作”按钮。它在基本模型的More菜单中创建了一个条目。这允许创建服务器操作并通过界面轻松地在批量模式下运行它们。

fatux: 没见过

可用的操作有:

  • ’ Execute Python Code ':将被执行的Python代码块
  • ’ Create a new Record ':用新值创建一个新记录
  • ’ Write on a Record ':更新记录的值
  • ’ Execute几个动作’:定义一个触发其他几个服务器动作的动作

允许从任何有效的操作位置触发复杂的服务器代码。只有两个字段与客户端相关:

id: 要执行的服务器端动作的在数据库中的ID

context (optional)

运行服务器操作时要使用的上下文数据

数据库内的记录非常丰富,可以根据它们的状态执行许多特定或通用的操作。一些字段(和相应的行为)在状态之间是共享的:

model_id 链接到动作的Odoo模型。

state:

  • code:执行通过code参数给出的python代码。
  • object_create:根据fields_lines规范创建一个新的模型crud_model_id记录。
  • object_write:根据fields_lines规范更新当前记录
  • multi:执行通过child_ids参数给出的几个动作。

4.2 State fields

根据其状态,行为通过不同的字段定义。每个字段后面都给出了相关的状态。

code :

指定一段Python代码在调用该动作时执行

<record model="ir.actions.server" id="print_instance">
    <field name="name">Res Partner Server Action</field>
    <field name="model_id" ref="model_res_partner"/>
    <field name="state">code</field>
    <field name="code">
        raise Warning(record.name)
    </field>
</record>	

代码段可以定义一个名为action的变量,它将作为下一个要执行的操作返回给客户端

<record model="ir.actions.server" id="print_instance">
    <field name="name">Res Partner Server Action</field>
    <field name="model_id" ref="model_res_partner"/>
    <field name="state">code</field>
    <field name="code">
        if record.some_condition():
            action = {
                "type": "ir.actions.act_window",
                "view_mode": "form",
                "res_model": record._name,
                "res_id": record.id,
            }
    </field>
</record>

如果满足某些条件,会要求客户打开表格进行记录

crud_model_id (create)(required)

在其中创建新记录的模型

link_field_id (create)

Many2one 到ir.model.fields,指定当前记录的m2o字段,新创建的记录应该设置在该字段上(模型应该匹配)。

fields_lines (create/write)

创建或复制记录时重写的字段。One2many 有如下字段:

col1

在相关模型中设置的Ir.model.fields (crud_model_id用于创建,model_id用于更新)

value

字段的值,通过类型解释

type (value|reference|equation)

value :value字段被解释为文字值(可能被转换)

equation: value字段被解释为Python表达式并求值

reference: ?

child_ids (multi)

指定要在multi状态中执行的多个子操作(ir.actions.server)。如果子操作本身返回操作,则最后一个操作将作为multi自己的下一个操作返回给客户端

Evaluation context

在服务器动作的表达式上下文中有许多可用的key:

  • model: 通过model_id链接到操作的模型对象
  • Record /records :触发动作的Record /records,t可以为空。
  • env Odoo环境
  • datetime, dateutil, time, timezone对应的Python模块
  • Log: Log (message, level=‘info’)日志功能,记录调试信息。日志表
  • Warning异常的警告构造函数

fatux: 终于整理完了,感觉挺乱的,没怎么理明白,以后碰到实际案例再说吧

5 报表动作(ir.actions.report)

触发报表的打印。 在form视图的打印菜单里

如果您通过而不是标记定义报表,并且希望操作显示在模型视图的Print菜单中,那么您还需要从Bindings中指定binding_model_id。没有必要将binding_type设置为report,因为ir.actions.report将隐式默认为该值。

5.1 name (mandatory)

未指定print_report_name时用作文件名。否则,当在某种类型的列表中查找报表时,仅作为助记符/描述有用

5.2 model (mandatory)

你的报告将涉及的模型

5.3 report_type (default=qweb-pdf)

PDF报告使用qweb-pdf, HTML报告使用qweb-html

5.4 report_name (mandatory)

用于呈现报告的qweb模板的名称(外部id)

5.5 print_report_name

定义报表名称的Python表达式。

5.6 groups_id

Many2many字段到允许查看/使用当前报表的组

5.7 multi

如果设置为True,则该操作将不会显示在表单视图上。

5.8 paperformat_id

Many2one字段转换为您希望用于此报告的纸张格式(如果未指定,将使用公司格式)。

5.9 attachment_use

如果设置为True,则报告只在第一次请求时生成一次,然后从存储的报告中重新打印,而不是每次都重新生成。

5.10 attachment

定义报表名称的Python表达式;record 可以作为变量对象访问

6 客户端动作(ir.actions.client)

触发一个完全在客户端实现的操作。

6.1 tag

操作的客户端标识符,一个客户端应该知道如何做出反应的任意字符串

6.2 params (optional)

与客户端动作标记一起发送给客户端的附加数据的Python字典

6.3 target (optional)

  • current: 当前主内容区域
  • fullscreen: 全屏
  • new: 对话框/弹窗
  • main: 代替current, 清除面包屑导航

默认值是current

{
    "type": "ir.actions.client",
    "tag": "pos.ui"
}

告诉客户端启动销售点接口,服务器不知道POS接口是如何工作的。

7 定时任务(ir.cron)

动作在预定义的频率上自动触发。文章来源地址https://www.toymoban.com/news/detail-610580.html

  • name : 自动动作的名称(主要用于日志显示)
  • interval_number: 两次执行操作之间的interval_type uom数
  • interval_type:频率间隔的测量单位(minutes, hours, days, weeks, months)
  • numbercall:此操作运行的次数。如果期望该操作无限期地运行,则设置为-1。
  • doall:布尔值, 表示在服务器重启的情况下是否必须执行错过的操作。
  • model_id: 将调用此操作的模型
  • code:操作的代码内容。可以是对模型方法的简单调用:
  • nextcall: 此操作的下一个计划执行日期(日期/时间格式)

到了这里,关于odoo16-python框架-动作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • slint 1.3.2 官方文档翻译06

    SlintPad 基于官方文档的个人翻译,主要使用 有道翻译。 Debugging Techniques - Slint 1.3.2 Reference ADVANCED TOPICS 高级的主题-- Debugging Techniques 调试技术   On this page we share different techniques and tools we’ve built into Slint that help you track down different issues you may be running into, during the design and dev

    2024年01月18日
    浏览(46)
  • OpenLayers7官方文档翻译,OpenLayers7中文文档,OpenLayers快速入门

    这个入门文档向您展示如何放一张地图在web网页上。 开发设置使用 NodeJS (至少需要Nodejs 14 或更高版本),并要求安装 git 。 开始使用OpenLayers构建项目的最简单方法是运行: npm create ol-app 第一个命令将创建一个名为 my-app 的目录(如果您愿意,可以使用不同的名称),安装

    2024年02月10日
    浏览(39)
  • 运维系列(仅供参考):官方文档翻译 -- 开始 Elasticsearch 入门

    想快速入门,来看 官方文档吧!!! 个人翻译版 Github地址,英语水平有限,有错误或遗漏的欢迎留言指正。 准备好如何使用 Elasticsearch 来测试驱动使用 REST APIs 来存储、查询、分析数据了吗? 遵循如下开始教程: 获取一个 Elasticsearch 实例并启动运行 添加索引实例文档 使用

    2024年04月27日
    浏览(45)
  • 快速傅里叶变换-FFTW库的使用-参考和翻译官方文档

    Plan:为实现意外结果的最佳方法而烦恼。 [Ambrose Bierce, The Enlarged Devil’s Dictionary。] FFTW 计算大小为 N 的一维 DFT 的基本用法很简单,它通常看起来像这样的代码: 您必须将此代码与 fftw3 库链接。 在 Unix 系统上,使用 -lfftw3 -lm 链接。 示例代码首先分配输入和输出数组。 您可

    2023年04月08日
    浏览(75)
  • Unity3d_Rewired官方文档翻译:概念(一):InputManager、Players、Actions

    仅翻译了官方文档中的Essentials(要点)、Concepts(概念)两部分,这是文档中最重要的部分,理解了这两部分的内容应该足以让你将Rewired运用到你的项目中,之后再去阅读文档的其他部分也能更容易理解。 斜体加下划线部分为添加的注解,非官方文档内容。若你发现有翻译

    2024年02月02日
    浏览(59)
  • 《如何搭建一条私有多Geth节点的链》最新版以太坊私链搭建官方文档要点翻译

    Last edited on January 31, 2023 This guide explains how to set up a private network of multiple Geth nodes. An Ethereum network is private if the nodes are not connected to the main network. In this context private only means reserved or isolated, rather than protected or secure. A fully controlled, private Ethereum network is useful as a backend for core de

    2024年02月08日
    浏览(43)
  • python姿态检测实现多人多姿态识别python行为识别openpose行为骨骼框架检测动作识别动作检测行为动作分类

    https://download.csdn.net/download/babyai996/88741189 https://download.csdn.net/download/babyai996/88741257  https://download.csdn.net/download/babyai996/88741262  https://download.csdn.net/download/babyai996/88741266  https://download.csdn.net/download/babyai996/88741272  https://download.csdn.net/download/babyai996/88741274  视频演示: python行为

    2023年04月20日
    浏览(35)
  • 开源预训练框架 MMPRETRAIN官方文档(概览、环境安装与验证、基础用户指南)

    MMPretrain是全新升级的开源预训练框架。它已着手提供多个强大的预训练骨干网并支持不同的预训练策略。MMPretrain 源自著名的开源项目 MMClassification 和MMSelfSup,并开发了许多令人兴奋的新功能。目前,预训练阶段对于视觉识别至关重要。凭借丰富而强大的预训练模型,我们目

    2024年02月13日
    浏览(36)
  • 前端常用的一些插件、UI框架、js库,样式库以及官方文档。【持续更新】

    1.1 文档地址 API文档 1.2 安装教程 1.下载安装 2.导入 2.1 文档地址 API文档 2.2 安装教程 1.下载安装 2.导入 3.1 文档地址 API文档 3.2 安装教程 1.下载安装 2.导入 3.安装遇到的问题 1)描述 ① 控制台报错 ② 终端报错 输出的内容都是 \\\"export xxx was not found in \\\'vue\\\' 2)解决 ① 先卸载 ya

    2024年02月03日
    浏览(33)
  • win10 搭建odoo16环境(docker或本地)

    一、 1.安装docker,下载docker工具 本人使用docker_toolbox进行安装,此处需注意git的path 创建default虚拟机,国内下载iso文件可能存在问题, 使用已下载好的iso文件 地址:https://github.com/boot2docker/boot2docker/releases 也可联系博主咨询 a.将文件放在 C:UsersAdministrator.dockermachinecache目录

    2024年02月08日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包