Odoo 19 中的基础视图有哪些?
在 Odoo 中,视图(View) 是在用户界面中展示业务对象的核心组件。无论是扩展现有功能还是开发新功能,业务对象都是基础元素,而这些对象会通过多种类型的视图呈现给用户 ——Odoo 会根据 XML 定义动态生成这些视图。
一、列表 / 树形视图(List or Tree View)
列表 / 树形视图用于在单个界面中以列表或树形结构展示多条记录。其中,每一行代表一条数据库记录,列则展示该记录的对应字段。

该视图支持排序、筛选、分组等操作,其 XML 定义以 <list> 标签作为根元素。以下是树形视图的定义示例:
<record id="student_info_view_tree" model="ir.ui.view"> <field name="name">student.info.view.tree</field> <field name="model">student.info</field> <field name="arch" type="xml"> <list> <field name="name"/> <!-- 学生姓名字段--> <field name="age"/> <!-- 学生年龄字段--> <field name="date_of_birth"/> <!-- 学生出生日期字段--> <field name="department_id" optional="show"/> <!-- 学生所属部门字段 --> </list> </field> </record>
在 ir.ui.view 模型中创建树形视图记录后,需在窗口动作(window action) 中将视图模式设置为 list(具体可参考下文表单视图记录后的代码块)。
二、表单视图(Form View)
表单视图用于展示单条记录的详细信息,可深入呈现记录包含的所有数据。其 XML 定义以 <form> 标签为根,包含结构元素(如 <sheet> <group>)和语义元素(如字段)。

以下是包含表单视图、树形视图及窗口动作的完整 XML 示例:
<record id="student_info_view_form" model="ir.ui.view"> <field name="name">student.info.view.form</field> <field name="model">student.info</field> <field name="arch" type="xml"> <form string="学生信息表单"> <!-- string 属性定义表单标题 --> <sheet> <!-- 表单主体区域,模拟纸质表单布局 --> <!-- 标题区域:显示学生姓名 --> <div class="oe_title"> <label for="name"/> <!-- 字段标签 --> <h1> <field name="name" placeholder="例如:张三" required="1"/> <!-- 姓名字段必填 --> </h1> </div> <!-- 分组区域:规整展示其他字段 --> <group> <field name="parent_id"/> <field name="age"/> <field name="date_of_birth"/> <field name="department_id"/> </group> </sheet> </form> </field> </record> <record id="student_info_view_form" model="ir.ui.view"> <field name="name">student.info.view.form</field> <field name="model">student.info</field> <field name="arch" type="xml"> <form string="学生信息表单"> <!-- string 属性定义表单标题 --> <sheet> <!-- 表单主体区域,模拟纸质表单布局 --> <!-- 标题区域:显示学生姓名 --> <div class="oe_title"> <label for="name"/> <!-- 字段标签 --> <h1> <field name="name" placeholder="例如:张三" required="1"/> <!-- 姓名字段必填 --> </h1> </div> <!-- 分组区域:规整展示其他字段 --> <group> <field name="age"/> <field name="date_of_birth"/> <field name="department_id"/> </group> </sheet> </form> </field> </record> <!-- 模型的窗口动作(定义用户如何交互) --> <record id="ir_action_act_window_students" model="ir.actions.act_window"> <field name="name">学生管理</field> <!-- 动作名称 --> <field name="res_model">student.info</field> <!-- 关联的业务模型 --> <field name="view_mode">kanban,list,graph,form,pivot</field> <!-- 支持的视图模式,tree已经弃用,改为list --> </record> <!-- 模型的根菜单 --> <menuitem id="student_info_root" name="学生管理" sequence="1"/><!-- sequence: 菜单显示顺序 --> <!-- 模型的子菜单(关联窗口动作) --> <menuitem id="student_info_menu" name="学生信息" parent="student_info_root" action="ir_action_act_window_students" sequence="0"/> <!-- parent:父菜单,action:点击菜单触发的动作 --> </data> </odoo>
上述代码中的窗口动作定义了用户在 Odoo 界面中与 student.info 模型的交互方式,关键配置说明如下:
- 名称(Name):动作标签为 “学生管理”;
- 模型(Model):作用于 student.info(学生信息)模型;
- 视图模式(View Mode):默认支持看板(kanban)、列表(list)、图表(graph)、表单(form)、数据透视(pivot)视图,用户可在这些模式间切换。
注意:为模型创建视图记录时,需指定对应的视图模式 —— 例如数据透视视图用 pivot、图表视图用 graph、看板视图用 kanban、活动视图用 activity、日历视图用 calendar、层级视图用 hierarchy。
三、数据透视视图(Pivot View)
数据透视视图是数据分析的核心工具,支持用户以多种格式创建、筛选报表,尤其适合导出报表(如 XLSX 格式)。

其 XML 定义以 <pivot> 标签为根,需指定字段及字段类型,可将数据按行或列排列以形成结构化视图。示例如下:
<record id="student_info_view_pivot" model="ir.ui.view"> <field name="name">student.info.view.pivot</field> <field name="model">student.info</field> <field name="arch" type="xml"> <pivot> <field name="name" type="row"/> <!-- 姓名字段作为“行” --> <field name="age" type="col"/> <!-- 年龄字段作为“列” --> <field name="department_id" type="row"/> <!-- 部门字段作为“列” --> </pivot> </field> </record>
四、图表视图(Graph View)
图表视图以可视化方式呈现数据,支持柱状图、饼图等多种图形格式,帮助用户快速理解数据规律。其 XML 定义以 <graph> 标签为根,需通过属性指定图表类型及展示字段。

以下示例为 “按日期统计学生生日数量” 的图表视图定义:
<record id="student_info_view_graph" model="ir.ui.view"> <field name="name">student.info.view.graph</field> <field name="model">student.info</field> <field name="arch" type="xml"> <graph string="学生生日统计图表" sample="1"> <!-- sample="1" 显示示例数据 --> <field name="name" type="col"/> <!-- 姓名字段作为“列分组” --> <field name="date_of_birth" type="row"/> <!-- 出生日期字段作为“行分组” --> <field name="age" type="measure"/> <!-- 年龄字段作为“度量值”(数值统计) --> </graph> </field> </record>
图表视图中字段的 type 属性决定数据的处理方式:
- type=“row”:该字段的每个值对应图表中的一行(行分组);
- type=“col”:该字段的每个值对应图表中的一列(列分组);
- type=“measure”:用于数值型数据(如整数、浮点数),表示图表中需度量或聚合的数值(如计数、求和)。
五、看板视图(Kanban View)
看板视图将记录以卡片(Card)形式展示,并可按列分类组织,便于可视化跟踪(如项目管理中跟踪任务状态)。

其 XML 定义以 <kanban> 标签为根,包含一组 QWeb 模板(核心模板通常名为 kanban-box,定义卡片结构)。示例如下:
<record id="student_info_view_kanban" model="ir.ui.view">
<field name="name">student.info.kanban</field>
<field name="model">student.info</field>
<field name="arch" type="xml">
<kanban class="o_kanban_mobile"> <!-- 适配移动端的看板样式 -->
<templates>
<!-- 卡片模板:定义单张卡片的内容结构 -->
<t t-name="card">
<div class="d-flex">
<field name="name" class="fw-bolder me-2 flex-shrink-0"/> <!-- 加粗显示姓名 -->
</div>
<div>年龄: <field name="age"/></div>
<div>出生日期: <field name="date_of_birth"/></div>
<div>所属部门: <field name="department_id"/></div>
</t>
</templates>
</kanban>
</field>
</record>
看板视图支持以下关键属性:
- default_group_by:用于在看板中对记录进行默认分组(如按 “部门” 分组显示学生卡片);
- default_order:定义记录在看板中的默认排序规则(如按 “年龄” 升序排列)。
六、日历视图(Calendar View)
日历视图用于跟踪关键日期与事件,是组织管理日程的核心工具(如跟踪招生周期、课程时间表)。其 XML 定义以 <calendar> 标签为根,通过 date_start date_stop color 等属性控制显示效果。

以下是 “学生信息管理” 的日历视图示例:
<record id="student_info_view_calendar" model="ir.ui.view">
<field name="name">student.info.calendar</field>
<field name="model">student.info</field>
<field name="arch" type="xml">
<calendar string="学生生日日历" create="0" date_start="date_of_birth">
<!-- create="0" 禁用日历中直接创建事件 -->
<field name="age"/>
<field name="name"/>
<field name="date_of_birth"/>
<field name="department_id"/>
</calendar>
</field>
</record>
日历视图的核心属性说明:
- date_start:指定日历事件的开始日期(关联模型中的日期字段,如示例中的 “出生日期”);
- date_stop:指定日历事件的结束日期;
- date_delay:作为 date_stop 的替代属性,通过 “时长” 间接定义事件结束时间;
- mode:日历的默认显示模式,支持 Day(日视图)、Week(周视图)、Month(月视图);
- color:根据指定字段(通常是 many2one 类型字段)为事件分配颜色 —— 相同字段值的事件显示为同一颜色;
- event_open_popup:布尔值属性,event_open_popup=“true” 时点击事件弹出弹窗,否则打开表单视图;
- quick_add:布尔值属性,启用后支持快速创建事件(无需打开完整表单)。
七、活动视图(Activity View)
活动视图用于组织和安排与记录相关的任务,帮助用户跟踪待办事项、监控进度,确保职责不遗漏。

以下是 “学生任务安排” 的活动视图示例:
<record id="student_info_view_activity" model="ir.ui.view">
<field name="name">student.info.view.activity</field>
<field name="model">student.info</field>
<field name="arch" type="xml">
<activity string="学生任务活动">
<!-- 关联活动的核心字段(来自mail.activity.mixin) -->
<field name="activity_ids"/>
<templates>
<!-- 活动卡片模板:定义活动项的显示结构 -->
<div t-name="activity-box">
<!-- 显示任务创建者头像 -->
<field name="create_uid" widget="many2one_avatar_user"/>
<div class="flex-grow-1">
<field name="name" string="学生姓名" class="o_text_block o_text_bold"/> <!-- 加粗显示学生姓名 -->
<field name="date_of_birth"/> <!-- 关联的日期字段(如任务截止日期) -->
</div>
</div>
</templates>
</activity>
</field>
</record>
活动视图的 XML 定义以 <activity> 标签为根,核心模板名为 activity-box,可通过字段配置结构化展示活动内容。
八、层级视图(Hierarchical View)
层级视图用于以树形结构展示具有 “父子关系” 的记录,适合组织具有层级规律的数据(如分类结构、组织架构)。例如,可通过该视图展示 “课程分类的层级关系”,清晰呈现子分类与父分类的从属关系。

以下是 “学生信息” 模型的层级视图示例:
<record id="student_info_view_hierarchy" model="ir.ui.view">
<field name="name">student.info.view.hierarchy</field>
<field name="model">student.info</field>
<field name="arch" type="xml">
<hierarchy child_field="child_ids" js_class="hr_employee_hierarchy" draggable="1">
<!-- child_field:指定存储“子记录ID”的字段 -->
<!-- js_class:引入自定义JS样式(如员工层级样式) -->
<!-- draggable="1":允许拖拽调整层级顺序 -->
<field name="name"/> <!-- 显示层级节点的名称 -->
<templates>
<t t-name="hierarchy-box">
<!-- 层级节点头部 -->
<div t-attf-class="o_hierarchy_node_header d-flex justify-content-center pb-4"
t-att-title="parent_id"> <!-- title 显示父节点信息 -->
</div>
<!-- 层级节点主体 -->
<div class="o_hierarchy_node_body d-flex flex-column text-center">
<div class="w-100 position-relative">
<field class="fw-bold" name="name"/><br/> <!-- 加粗显示节点名称 -->
</div>
</div>
</t>
</templates>
</hierarchy>
</field>
</record>
Odoo 19 的高级层级视图增强了菜单功能的实用性,提升了平台对业务管理的支持能力 —— 用户可直观处理记录间的复杂父子关系,简化导航流程,提高系统易用性。
九、其他特殊视图(仅 Odoo 企业版)
除上述基础视图外,Odoo 还提供同期群视图(Cohort View) 和甘特图视图(Gantt View),但这两种视图仅在 Odoo 企业版中提供,主要用于高级数据监控与管理:
- 同期群视图:适合按 “时间区间分析数据”,如监控客户留存率、跟踪项目进展阶段;
- 甘特图视图:是项目管理的核心工具,以甘特图格式展示任务与时间线,便于规划任务周期、监控进度。