查看记录

视图定义了如何向最终用户显示记录。它们在 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_idmode 字段确定 view resolutionxpathNODE 元素指示 inheritance specsexprposition 属性指定 inheritance position

查看分辨率

分辨率为请求/匹配的 primary 视图生成最终 arch ,如下所示:

  1. 如果视图有父视图,则父视图已完全解析,则应用当前视图的继承规范;

  2. 如果视图没有父视图,则按原样使用其 arch

  3. 查找模式为 extension 的当前视图的子视图,并以深度优先方式应用它们的继承规范(应用子视图,然后是其子视图,然后是其兄弟视图)。

继承根据 inherit_id 字段应用。如果多个视图记录继承同一个视图,则顺序由 priority 确定。

应用子视图的结果产生最终的`arch`。

继承规范

继承规范按顺序应用,包括:

  1. 一个元素定位器,用于匹配父视图中继承的元素;

  2. 子元素修改继承的元素。

元素定位器分为三种类型:

  • 具有 expr 属性的 xpath 元素。 expr 是一个 XPath 表达式1 应用于当前 arch,匹配它找到的第一个节点;

  • 具有 name 属性的 field 元素,与具有相同 name 的第一个字段匹配。

    注解

    所有其他属性都将被忽略。

  • 任何其他元素,与具有相同 name 和相同属性的第一个元素匹配。

    注解

    属性 positionversion 被忽略。

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 命名的匹配节点属性的值,以考虑 addremove 和默认为 , 的可选 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,其值为 insidereplaceafterbefore

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>

模型共享