view_ids, view_id,view_mode 最终目的都是为了生成views, 也就是视图.
模型是死的,像男人,一成不变
视图像女人,千变万化, 姿态万千
一阴一阳之谓道,设计之美又在这里得到了体现
可以通过在"设置-技术-动作" 定义. 定义好之后会出现在对应模型的动作列表中
动作定义了系统响应用户操作的行为比如,登录、操作按钮、选择发票、…
动作可以存储在数据库中,也可以直接作为字典返回,例如按钮方法。所有动作都有两个强制属性:
type
当前操作的类别决定了可以使用哪些字段以及如何解释操作
name
简短的用户可读的操作描述,可以显示在客户端界面中
客户端可以通过4种形式获得动作:
除了它们的两个强制属性,所有动作还共享可选属性,用于在任意模型的上下文菜单中显示动作:
指定操作绑定到哪个模型
注意: 对于 Server Actions,使用model_id
指定绑定的类型,主要是操作将出现在哪个上下文菜单下
action(default)
指定该动作将出现在绑定模型的action上下文菜单中。
report
指定该操作将出现在绑定模型的“打印”上下文菜单中。
这两个都是在form视图中才有的.
一个逗号分隔的视图类型列表,操作将出现在上下文菜单中,主要是“list”和/或“form”。默认为列表,表单(列表和表单)
最常见的动作类型,用于通过视图呈现模型的可视化:
有如下字段:
视图对应的模型名称
(view_id, view_type)对的列表。每对中的第二个元素是视图(tree、from、graph等)的类别,第一个元素是可选的数据库id(或False)。如果没有提供id,客户端应该为所请求的模型获取指定类型的默认视图(这是由fields_view_get()自动完成的)。列表的第一种类型是默认视图类型,在执行动作时默认打开。每种视图类型在列表中最多只能出现一次
如果默认视图是form,则指定要加载的记录(否则应该创建一个新记录)
search_view_id
(optional)(id, name)对,id是要为操作加载的特定搜索视图的数据库标识符。默认为获取模型的默认搜索视图
target
(optional)视图是否应该在主内容区(current)、全屏模式(fullscreen)或对话框/弹出(new)中打开。使用main代替current来清除面包屑。默认为current。
经过测试: 对于URL ACTIONS来说,只有new可以用,其他都报错
context
(optional)传递给视图的其他上下文数据
domain
(optional)过滤域以隐式添加到所有视图搜索查询
limit
(optional)默认情况下在列表中显示的记录数。在web客户端中默认为80
打开合作伙伴中的消费者的视图:
{
"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 Requestfield>
<field name="res_model">hr.leave.allocationfield>
<field name="view_mode">formfield>
<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">newfield>
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">treefield>
<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 Analysisfield>
<field name="res_model">hr.expensefield>
<field name="view_mode">graph,pivot,tree,formfield>
<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">graphfield>
<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">pivotfield>
<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">treefield>
<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 Actionfield>
<field name="res_model">some.modelfield>
<field name="view_mode">graphfield>
<field name="view_id" ref="my_specific_view"/>
record>
上面这个例子将使用" my_specific_view "视图,即使那不是模型的默认视图。
视图序列的服务器端组成如下:
view_ids, view_id,view_mode 最终目的都是为了生成views, 也就是视图.
模型是死的,像男人,一成不变
视图像女人,千变万化, 姿态万千
一阴一阳之谓道,设计之美又在这里得到了体现
允许通过Odoo操作打开URL(网站/网页)。可以通过两个字段进行定制:
动作时要打开的地址
{
"type": "ir.actions.act_url",
"url": "https://odoo.com",
"target": "self",
}
class odoo.addons.base.models.ir_actions.IrActionsServer(env, ids, prefetch_ids)[source]
服务器端的动作。服务器动作在基本模型上工作,并提供可以自动执行的各种类型的操作,例如使用基本操作规则,或者通过在“More”上下文菜单中手动添加操作。
从Odoo 8.0开始,在操作表单视图上增加了一个“创建菜单操作”按钮。它在基本模型的More菜单中创建了一个条目。这允许创建服务器操作并通过界面轻松地在批量模式下运行它们。
fatux: 没见过
可用的操作有:
允许从任何有效的操作位置触发复杂的服务器代码。只有两个字段与客户端相关:
id: 要执行的服务器端动作的在数据库中的ID
context
(optional)
运行服务器操作时要使用的上下文数据
数据库内的记录非常丰富,可以根据它们的状态执行许多特定或通用的操作。一些字段(和相应的行为)在状态之间是共享的:
model_id 链接到动作的Odoo模型。
state:
根据其状态,行为通过不同的字段定义。每个字段后面都给出了相关的状态。
指定一段Python代码在调用该动作时执行
<record model="ir.actions.server" id="print_instance">
<field name="name">Res Partner Server Actionfield>
<field name="model_id" ref="model_res_partner"/>
<field name="state">codefield>
<field name="code">
raise Warning(record.name)
field>
record>
代码段可以定义一个名为action的变量,它将作为下一个要执行的操作返回给客户端
<record model="ir.actions.server" id="print_instance">
<field name="name">Res Partner Server Actionfield>
<field name="model_id" ref="model_res_partner"/>
<field name="state">codefield>
<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 有如下字段:
在相关模型中设置的Ir.model.fields (crud_model_id用于创建,model_id用于更新)
字段的值,通过类型解释
type
(value|reference|equation)value :value字段被解释为文字值(可能被转换)
equation: value字段被解释为Python表达式并求值
reference: ?
child_ids
(multi)指定要在multi状态中执行的多个子操作(ir.actions.server)。如果子操作本身返回操作,则最后一个操作将作为multi自己的下一个操作返回给客户端
在服务器动作的表达式上下文中有许多可用的key:
fatux: 终于整理完了,感觉挺乱的,没怎么理明白,以后碰到实际案例再说吧
触发报表的打印。 在form视图的打印菜单里
如果您通过而不是标记定义报表,并且希望操作显示在模型视图的Print菜单中,那么您还需要从Bindings中指定binding_model_id。没有必要将binding_type设置为report,因为ir.actions.report将隐式默认为该值。
name
(mandatory)未指定print_report_name时用作文件名。否则,当在某种类型的列表中查找报表时,仅作为助记符/描述有用
model
(mandatory)你的报告将涉及的模型
report_type
(default=qweb-pdf)PDF报告使用qweb-pdf, HTML报告使用qweb-html
report_name
(mandatory)用于呈现报告的qweb模板的名称(外部id)
定义报表名称的Python表达式。
Many2many字段到允许查看/使用当前报表的组
如果设置为True,则该操作将不会显示在表单视图上。
Many2one
字段转换为您希望用于此报告的纸张格式(如果未指定,将使用公司格式)。
如果设置为True,则报告只在第一次请求时生成一次,然后从存储的报告中重新打印,而不是每次都重新生成。
定义报表名称的Python表达式;record 可以作为变量对象访问
触发一个完全在客户端实现的操作。
操作的客户端标识符,一个客户端应该知道如何做出反应的任意字符串
params
(optional)与客户端动作标记一起发送给客户端的附加数据的Python字典
target
(optional)默认值是current
{
"type": "ir.actions.client",
"tag": "pos.ui"
}
告诉客户端启动销售点接口,服务器不知道POS接口是如何工作的。
动作在预定义的频率上自动触发。
,
hours,
days,
weeks,
months)