跳至内容

odoo19 常用的基础视图详解

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 企业版中提供,主要用于高级数据监控与管理:

  • 同期群视图:适合按 “时间区间分析数据”,如监控客户留存率、跟踪项目进展阶段;
  • 甘特图视图:是项目管理的核心工具,以甘特图格式展示任务与时间线,便于规划任务周期、监控进度。

odoo19  常用的基础视图详解
中国 Odoo, 苏州远鼎 2026年1月4日
标签
存档