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)

动作在预定义的频率上自动触发。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/11045.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Python入门系列】第十八篇:Python自然语言处理和文本挖掘

文章目录 前言一、Python常用的NLP和文本挖掘库二、Python自然语言处理和文本挖掘1、文本预处理和词频统计2、文本分类3、命名实体识别4、情感分析5、词性标注6、文本相似度计算 总结 前言 Python自然语言处理&#xff08;Natural Language Processing&#xff0c;简称NLP&…

慕课网Go-3.函数、defer、panic、recover、结构体、指针、interface

函数 package mainimport "fmt"func add(a int, b int) (int, error) {return a b, nil }func add2(a int, b int) (sum int, err error) {sum a berr nilreturn sum, err }// 参数数量任意 func add3(items ...int) (sum int) {for _, value : range items {su…

注解和反射02--Java反射

反射 动态和静态语言获取反射对象Java反射机制提供的功能Java反射优缺点反射相关的主要API 动态和静态语言 要学习反射&#xff0c;首先我们需要了解一下静态和动态语言。 动态语言&#xff1a;是一类在运行时可以改变其结构的语言&#xff1a;例如新的函数、对象、甚至代码可…

Tomcat调优1

Tomcat调优的具体应用场景和案例可以考虑这些方面: 高并发场景 增加最大线程数,推荐设置为200-500左右。 优化线程池参数,增大工作队列容量防止请求排队。 使用NIO连接器,提高连接处理效率。 适当增大最大连接数,根据硬件设定为2000-4000。 大流量场景 适当调大Tomcat及J…

C语言习题练习

C语言习题练习 一、offsetof宏二、交换奇偶位三、原地移除数组总结 一、offsetof宏 首先我们要了解什么是offsetof宏&#xff1a; . 此具有函数形式的宏返回数据结构或联合类型中成员成员的偏移值&#xff08;以字节为单位&#xff09;。 . 返回的值是size_t类型的无符号整数…

Is Mapping Necessary for Realistic PointGoal Navigation 论文阅读和代码分析

论文 论文信息 题目&#xff1a;Is Mapping Necessary for Realistic PointGoal Navigation? 作者&#xff1a;Ruslan Partsey、 Erik Wijmans 代码地址&#xff1a;rpartsey.github.io/pointgoalnav 来源&#xff1a;CVPR Abstract 目标&#xff1a;证明显式地图不是成功…

【数据结构】实验九:二叉树

实验九 二叉树 一、实验目的与要求 1&#xff09;理解二叉树的类型定义&#xff1b; 2&#xff09;掌握二叉树的存储方式及基于存储结构的基本操作实现&#xff1b; 二、 实验内容 1. 二叉树的结点定义如下&#xff1a; struct TreeNode { int m_nvalue; TreeNode* m_…

多源BFS-- 矩阵距离

关于多源BFS&#xff0c;基本上就是单源BFS的简单升级了一下&#xff0c;比如在queue中队头开始时只有一个&#xff0c;我们通过这一个队头去推导其他的东西。而多源最短路就是队头一开始有1-n个可能的数&#xff0c;一个一个去BFS。 题目思路&#xff1a; 这个题就直接把所有的…

分享69个Java源码,总有一款适合您

Java源码 分享69个Java源码&#xff0c;总有一款适合您 下面是文件的名字&#xff0c;我放了一些图片&#xff0c;文章里不是所有的图主要是放不下...&#xff0c;大家下载后可以看到。 源码下载链接&#xff1a; https://pan.baidu.com/s/1ZgbJhMNwIyFyqFzHsDdL5w 提取码&a…

excel添加列匹配对比及标签生成(留存)

import pandas as pd import numpy as np import os from datetime import date,datetime todaydate.today()downpath/Users/kangyongqing/Downloads/ gensuipath/Users/kangyongqing/Documents/kangyq/202209/OKR预占/2023Q2促留存/月度留存分级/24样本学生跟随.xlsxdownname1…

WPF实战学习笔记17-TodoView 添加新增、编辑、查询功能

文章目录 TodoView 添加新增、编辑、查询功能修改TodoViewModel.cs修改XAML修改ToDoService TodoView 添加新增、编辑、查询功能 修改TodoViewModel.cs using Mytodo.Common.Models; using Mytodo.Service; using Prism.Commands; using Prism.Ioc; using Prism.Mvvm; using …

WebSocket心跳机制(笔记大全)

一、WebSocket心跳机制前端 前端实现WebSocket心跳机制的方式主要有两种&#xff1a; 使用setInterval定时发送心跳包。在前端监听到WebSocket的onclose()事件时&#xff0c;重新创建WebSocket连接。 第一种方式会对服务器造成很大的压力&#xff0c;因为即使WebSocket连接正…

HummerRisk V1.3.0 发布

HummerRisk V1.3.0发布&#xff1a; 大家好&#xff0c;HummerRisk 1.3.0和大家见面了&#xff0c;在这个版本中我们继续在多云接入管理、多云检测方式、云资源态势方面提供新的能力&#xff0c;并增加了新的镜像仓库支持类型&#xff0c;并优化了云的区域选择、优化规则组内容…

C#时间轴曲线图形编辑器开发1-基本功能

目录 一、前言 1、简介 2、开发过程 3、工程下载链接 二、基本功能实现 1、绘图面板创建 &#xff08;1&#xff09;界面布置 &#xff08;2&#xff09;显示面板代码 &#xff08;3&#xff09; 面板水平方向、竖直方向移动功能实现 &#xff08;4&#xff09;面板放…

【数据结构】实验五:栈

实验五 栈 一、实验目的与要求 1&#xff09;熟悉栈的类型定义和基本操作&#xff1b; 2&#xff09;灵活应用栈解决具体应用问题。 二、实验内容 1、判断回文数&#xff0c;回文是指正读反读均相同的字符序列&#xff0c;如“1221”和“12321”均是回文&#xff0c;但“…

与传统透明屏相比,BOE透明屏有哪些特点优势?

BOE透明屏是一种新型的显示技术&#xff0c;它能够实现透明度高达90%以上的显示效果。这种屏幕可以应用于各种领域&#xff0c;如商业展示、智能家居、汽车行业等&#xff0c;具有广阔的市场前景。 BOE透明屏采用了先进的光学技术&#xff0c;通过控制光的传播和折射&#xff…

自建纯内网iot平台服务,软硬件服务器全栈实践

基于以下几个考虑&#xff0c;自制硬件设备&#xff0c;mqtt内网服务器。 1.米家app不稳定&#xff0c;逻辑在云端或xiaomi中枢网关只支持少部分在本地计算。 2.监控homeassistant官方服务有大量数据交互。可能与hass安装小米账户有关。 3.硬件&#xff1a;原理图&#xff0c;l…

linux信号介绍

信号介绍 信号的概念 信号是信息的载体&#xff0c;Linux/UNIX 环境下&#xff0c;古老、经典的通信方式&#xff0c; 现下依然是主要的通信手段。 信号在我们的生活中随处可见&#xff0c;例如&#xff1a; 古代战争中摔杯为号&#xff1b; 现代战争中的信号弹&#x…

【KVC补充 Objective-C语言】

一、KVC补充 好,那么接下来,再给大家说一下这个KVC 1.首先我们说,这个KVC,就是指的什么 key value coding 吧 全称就是叫做(Key Value Coding),这是它的全称 那么,你在帮助文档里面搜的时候,你就搜key-value coding 是不是这个啊,key-value coding 然后点击,进…

Unity XML3——XML序列化

一、XML 序列化 ​ 序列化&#xff1a;把对象转化为可传输的字节序列过程称为序列化&#xff0c;就是把想要存储的内容转换为字节序列用于存储或传递 ​ 反序列化&#xff1a;把字节序列还原为对象的过程称为反序列化&#xff0c;就是把存储或收到的字节序列信息解析读取出来…