查看记录¶
视图定义了如何向最终用户显示记录。它们在 XML 中指定并存储为记录本身,这意味着它们可以独立于它们所表示的模型进行编辑。它们非常灵活,并且允许对它们控制的屏幕进行高水平的定制。存在各种:ref:types of views <reference/view_records/types>。每个代表一种可视化模式:表单、列表、*看板*等。
通用结构¶
基本视图通常共享下面定义的公共最小结构。占位符全部大写。
<record id="ADDON.MODEL_view_TYPE" model="ir.ui.view">
<field name="name">NAME</field>
<field name="model">MODEL</field>
<field name="arch" type="xml">
<VIEW_TYPE>
<views/>
</VIEW_TYPE>
</field>
</record>
查看类型¶
- Form
显示和编辑单个记录中的数据。
- List
查看和编辑多条记录。
- Search
应用过滤器并执行搜索。结果显示在当前列表、看板…视图中。
- Kanban
将记录显示为“卡片”,可配置为小模板。
- Qweb
报告模板、网站…
- Graph
可视化多个记录或记录组的聚合。
- Pivot
将聚合显示为 pivot table。
- Calendar
将记录显示为每日、每周、每月或每年日历中的事件。
- Cohort Enterprise feature
显示并了解某些数据在一段时间内的变化方式。
- Gantt Enterprise feature
将记录显示为甘特图。
- Grid Enterprise feature
在数字单元格中显示计算信息;很难配置。
- Map Enterprise feature
在地图上显示记录以及它们之间的路线。
领域¶
查看记录公开了许多字段。
注解
当前上下文和用户访问权限也可能影响查看能力。
遗产¶
继承允许自定义交付的视图。例如,它可以在安装模块时添加内容,或者根据操作提供不同的显示。
继承视图通常共享下面定义的通用结构。占位符全部大写。该综合视图将更新 XPath 所针对的节点,以及以其名称和属性为目标的另一个节点。
<record id="ADDON.MODEL_view_TYPE" model="ir.ui.view">
<field name="model">MODEL</field>
<field name="inherit_id" ref="VIEW_REFERENCE"/>
<field name="mode">MODE</field>
<field name="arch" type="xml">
<xpath expr="XPATH" position="POSITION">
<CONTENT/>
</xpath>
<NODE ATTRIBUTES="VALUES" position="POSITION">
<CONTENT/>
</NODE>
</field>
</record>
inherit_id 和 mode 字段确定 view resolution。 xpath 或 NODE 元素指示 inheritance specs。 expr 和 position 属性指定 inheritance position。
查看分辨率¶
分辨率为请求/匹配的 primary 视图生成最终 arch ,如下所示:
如果视图有父视图,则父视图已完全解析,则应用当前视图的继承规范;
如果视图没有父视图,则按原样使用其
arch;查找模式为
extension的当前视图的子视图,并以深度优先方式应用它们的继承规范(应用子视图,然后是其子视图,然后是其兄弟视图)。
继承根据 inherit_id 字段应用。如果多个视图记录继承同一个视图,则顺序由 priority 确定。
应用子视图的结果产生最终的`arch`。
继承规范¶
继承规范按顺序应用,包括:
一个元素定位器,用于匹配父视图中继承的元素;
子元素修改继承的元素。
元素定位器分为三种类型:
具有
expr属性的xpath元素。expr是一个 XPath 表达式1 应用于当前arch,匹配它找到的第一个节点;具有
name属性的field元素,与具有相同name的第一个字段匹配。注解
所有其他属性都将被忽略。
任何其他元素,与具有相同
name和相同属性的第一个元素匹配。注解
属性
position和version被忽略。
- 1
添加了扩展函数以简化 QWeb 视图中的匹配:如果上下文节点具有所有指定的类,则
hasclass(*classes)匹配。
Example
<xpath expr="page[@name='pg']/group[@name='gp']/field" position="inside">
<field name="description"/>
</xpath>
<div name="name" position="replace">
<field name="name2"/>
</div>
继承地位¶
继承规范接受可选的 position 属性,默认为 inside,它指定应如何修改匹配的节点。
- inside¶
继承规范的内容将附加到匹配的节点。
Example
<notebook position="inside"> <page string="New feature"> ... </page> </notebook>
- after¶
继承规范的内容将附加到匹配节点的父节点之后。
Example
<xpath expr="//field[@name='x_field']" position="after"> <field name="x_other_field"/> </xpath>
- before¶
继承规范的内容被附加到匹配节点的父节点之前。
Example
<field name=x_field" position="before"> <field name="x_other_field"/> </field>
- replace¶
继承规范的内容替换匹配的节点。规范内容中仅包含
$0的任何文本节点都会被匹配节点的副本替换,从而有效地包装匹配节点。Example
<xpath expr="//field[@name='x_field']" position="replace"> <div class="wrapper"> $0 </div> </xpath>
- attributes¶
继承规范的内容应仅由
attribute元素组成,每个元素都有一个name属性和一个可选主体。如果
attribute元素具有主体,则会将以其name命名的新属性添加到匹配的节点,并以attribute元素的文本作为值。如果
attribute元素没有主体,则将从匹配节点中删除以其name命名的属性。如果
attribute元素具有add属性、remove属性或两者,则重新计算以name命名的匹配节点属性的值,以考虑add、remove和默认为,的可选separator属性的值。add包括其值,由separator分隔。remove删除其值,并用separator分隔。
Example
<field name="x_field" position="attributes"> <attribute name="invisible">True</attribute> <attribute name="class" add="mt-1 mb-1" remove="mt-2 mb-2" separator=" "/> </field>
- move¶
属性
position="move"在继承规范的内容上设置,以指定节点如何相对于继承规范的元素定位器移动,还必须在其上设置属性position,其值为inside、replace、after或before。Example
<xpath expr="//@target" position="after"> <xpath expr="//@node" position="move"/> </xpath> <field name="target_field" position="after"> <field name="my_field" position="move"/> </field>