Odoo 19 中的基础视图有哪些?

Odoo 19 中的基础视图有哪些?

在 Odoo 中,视图(View) 是在用户界面中展示业务对象的核心组件。无论是扩展现有功能还是开发新功能,业务对象都是基础元素,而这些对象会通过多种类型的视图呈现给用户 ------Odoo 会根据 XML 定义动态生成这些视图。

一、列表 / 树形视图(List or Tree View)

列表 / 树形视图用于在单个界面中以列表或树形结构展示多条记录。其中,每一行代表一条数据库记录,列则展示该记录的对应字段。

该视图支持排序、筛选、分组等操作,其 XML 定义以 <list> 标签作为根元素。以下是树形视图的定义示例:

xml 复制代码
<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 示例:

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> 标签为根,需指定字段及字段类型,可将数据按行或列排列以形成结构化视图。示例如下:

xml 复制代码
<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> 标签为根,需通过属性指定图表类型及展示字段。

以下示例为 "按日期统计学生生日数量" 的图表视图定义:

xml 复制代码
<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,定义卡片结构)。示例如下:

xml 复制代码
<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 等属性控制显示效果。

以下是 "学生信息管理" 的日历视图示例:

xml 复制代码
<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)

活动视图用于组织和安排与记录相关的任务,帮助用户跟踪待办事项、监控进度,确保职责不遗漏。

以下是 "学生任务安排" 的活动视图示例:

xml 复制代码
<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)

层级视图用于以树形结构展示具有 "父子关系" 的记录,适合组织具有层级规律的数据(如分类结构、组织架构)。例如,可通过该视图展示 "课程分类的层级关系",清晰呈现子分类与父分类的从属关系。

以下是 "学生信息" 模型的层级视图示例:

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

  • 同期群视图:适合按 "时间区间分析数据",如监控客户留存率、跟踪项目进展阶段;
  • 甘特图视图:是项目管理的核心工具,以甘特图格式展示任务与时间线,便于规划任务周期、监控进度。
相关推荐
山上春5 天前
ONLYOFFICE Odoo 集成架构深度解析与实战手册(odoo文件预览方案)
架构·odoo
odoo中国9 天前
如何在 Odoo 19 中创建日历视图
odoo·odoo19·odoo 视图开发·日历视图配置·alendar 标签使用·odoo 日程管理
odoo中国13 天前
如何在 Odoo 19 中加载演示数据
xml·csv·odoo·odoo 19·odoo 演示数据加载
odoo中国15 天前
Odoo 19 模块结构概述
开发语言·python·module·odoo·核心组件·py文件按
隔壁小红馆18 天前
Odoo 15 到 Odoo 19 API 变化完整知识库(详细版)
odoo17·odoo18·odoo19
odoo中国20 天前
如何在 Odoo 中从 XML 文件调用函数
xml·odoo·odoo开发·调用函数
李怀瑾1 个月前
在Odoo18中实现多选下拉框搜索功能
odoo
Odoo老杨2 个月前
Odoo全球领先的开源ERP:助力洛民塑料激活民族品牌拓界出海
odoo·erp·中小企业数字化
odoo-卜永4 个月前
odoo阿里云大模型多字段内容翻译
阿里云·odoo·大模型翻译