视图记录¶
视图定义了记录应如何向最终用户展示。它们以 XML 形式指定并作为记录存储,这意味着它们可以独立于其所表示的模型进行编辑。它们非常灵活,允许对所控制的界面进行高度自定义。存在多种 视图类型 ,每种类型代表一种可视化模式: 表单 、 列表 、 看板 等。
通用结构¶
基本视图通常共享以下定义的通用最小结构。占位符以全大写表示。
<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>
视图类型¶
- 表单
显示和编辑单个记录的数据。
- 列表
查看和编辑多个记录。
- 搜索
应用过滤器并执行搜索。结果会显示在当前的列表、看板等视图中。
- 看板
以“卡片”形式显示记录,可配置为小型模板。
- QWeb
用于报表、网站等的模板引擎…
- 图表
可视化多个记录或记录组的聚合数据。
- 透视表
以 透视表 形式显示聚合数据。
- 日历
以日、周、月或年的日历形式显示记录为事件。
- 队列分析 Enterprise feature
显示并理解某些数据在一段时间内的变化方式。
- 甘特图 Enterprise feature
以甘特图形式显示记录。
- 网格 Enterprise feature
在数值单元格中显示计算信息;几乎不可配置。
- 地图 Enterprise feature
在地图上显示记录及它们之间的路线。
字段¶
视图记录公开了多个字段。
- class odoo.addons.base.models.ir_ui_view.IrUiView[源代码]¶
-
- groups_id¶
允许使用/访问当前视图的用户组。
如果视图扩展了现有视图,则仅为具有访问权限的用户提供扩展功能(基于提供的
groups_id)。- 要求
可选
- 类型
Many2many->Groups
- priority¶
通过指定
model和type请求视图时,将返回优先级最低的匹配视图(即默认视图)。它还定义了在 视图解析 期间应用视图的顺序。当通过
id请求视图且其模式不是primary时,将匹配其最近的父视图(mode=primary)。- 要求
可选
- 类型
- inherit_id¶
对将应用 继承 的父视图的引用。其值默认使用。通过
ref属性指定父视图,格式为ref="ADDON.MODEL_parent_view_TYPE"。如果继承是在同一模块中的记录上完成的,则插件名称(点号前的部分)不是必需的。
更多信息,请参见 继承 。
- 要求
可选
- 类型
- mode¶
仅在该视图继承自其他视图时适用(即设置了
inherit_id)。- extension¶
如果请求了该视图,则会查找最近的主视图(通过
inherit_id)。然后,所有基于此模型继承自它的视图都会被应用。
一种需要在使用
inherit_id时覆盖mode的情况是委托继承。在这种情况下,派生模型与其父模型分离,并且匹配一个模型的视图不会匹配另一个模型。假设从与父模型关联的视图继承,并希望自定义派生视图以显示派生模型的数据,则需要将派生视图的mode设置为primary,因为它是该派生模型的基础(也可能是唯一的)视图。否则, 视图匹配 规则将不适用。更多信息,请参见 继承 。
- 要求
可选
- 类型
Selection:扩展/主视图- 默认值
扩展
注解
当前上下文和用户访问权限也可能影响视图的功能。
继承¶
继承允许自定义交付的视图。例如,它可以在安装模块时添加内容,或者根据操作提供不同的显示方式。
继承视图通常共享以下定义的通用结构。占位符以全大写表示。此合成视图将更新由 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 字段决定了 视图解析 。xpath 或 NODE 元素指示了 继承规范 。expr 和 position 属性指定了 继承位置 。
视图解析¶
解析按照以下步骤生成请求/匹配的 primary 视图的最终 arch :
如果视图有父视图,则先完全解析父视图,然后应用当前视图的继承规范;
如果视图没有父视图,则直接使用其
arch;查找当前视图中模式为
extension的子视图,并按深度优先顺序应用其继承规范(先应用子视图,再应用其子视图,最后应用其兄弟视图)。
继承根据 inherit_id 字段应用。如果有多个视图记录继承同一个视图,则顺序由 priority 决定。
应用子视图的结果生成最终的 arch 。
继承规范¶
继承规范按顺序应用,由以下部分组成:
一个元素定位器,用于匹配父视图中的继承元素;
子元素用于修改继承的元素。
元素定位器有三种类型:
一个带有
expr属性的xpath元素。expr是应用于当前arch的 XPath 表达式1 ,匹配找到的第一个节点;一个带有
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>
模型通用¶
- class odoo.addons.base.models.ir_ui_view.Base[源代码]
- get_views(views, options=None)[源代码]¶
返回给定视图的 fields_views,以及当前模型的字段,并可选地返回针对给定操作的过滤器。
方法的返回值只能依赖于请求的视图类型、访问权限(视图或其他记录)、视图访问规则、选项、上下文语言和 TYPE_view_ref(其他上下文值不能使用)。
包含在视图中或表示域(在 Python 字段上)的 Python 表达式将由客户端使用所有上下文值以及其拥有的记录值进行评估。
- 参数
views – 视图 ID 和视图类型的列表 [view_id, view_type]
options (dict) – 一个字典,包含可选布尔标志,用于启用以下功能:
toolbar加载 fields_views 时包括上下文操作load_filters返回模型的过滤器action_id获取过滤器的操作 ID,否则加载全局过滤器或模型过滤器
- 返回
包含 fields_views、字段以及可选过滤器的字典