Alan Hou的个人博客

第十章 Odoo 15开发之后台视图 – 设计用户界面

本章讲解如何创建视图实现业务应用的用户界面。Odoo用户界面首当其冲的是菜单项以及点击菜单所执行的各种操作,因此我们首先会学习这些内容。

最常用的视图类型是表单视图,有几种元素我们必须要学习,包含如何在视图中组织元素布局以及理解字段和按钮中的所有选项。

其它常用的视图有列表视图搜索视图。最后,还有一些具有特殊目的的其它视图类型,比如透视表和图表视图。在本章的最后会进行概述。

本章的主要内容有:

在本章的最后,读者应该会熟知Odoo的所有视图类型并能够使用它们。具体来说,读者应该有信心设计一些不太复杂的表单视图并满足基本用户体验。

开发准备

我们将继续使用library_checkout插件模块。其模型层已完成,现在需要视图层来实现用户界面。

本章的代码基于第八章 Odoo 15开发之业务逻辑 – 业务流程的支持。相关代码请参见GitHub 仓库ch10目录。

添加菜单项

菜单项是用户界面的入口,它们形成一个层级结构,最顶级项为应用,其下一级为每个应用的主菜单。还可以添加更深的子菜单。

不带子菜单的菜单项是可操作的,可以触发告知客户端所进行的操作,比如打开一个视图。

菜单项存储在ir.ui.menu模型中,可通过Settings > Technical > User Interface > Menu Items菜单进行查看。

library_app模块为图书创建了一个顶级菜单,library_checkout插件模块添加了借阅和借阅阶段的菜单项。它们都位于library_checkout/views/library_menu.xml文件中。

借阅菜单项 XML代码如下:

上面代码使用了一个<menuitem>快捷元素,它是一种简写方式,比<record model="ir.ui.menu">元素写起来更为简便。

<menuitem>最常用的属性有:

还有以下可用属性:

菜单项可运行操作,由action属性指定,大部分情况是窗口操作。下一节中我们会讲解如何创建操作以及其功能。

理解窗口操作(Window Actions)

菜单上的窗口操作向网页客户端发出指令,比如打开一个视图,可用于菜单项或视图中的按钮。

窗口操作指定所用模型及用户界面中展示的视图。也可以使用作用域(domain)过滤器过滤出可用记录,及使用context属性设置默认值和过滤器。

窗口操作存储在ir.actions.act_window模型中,可通过Settings > Technical > Actions > Window Actions菜单进行查看。

library_checkout/views/library_menu.xml文件中包含有借阅菜单项所使用窗口操作的定义:

窗口操作是一条ir.actions.act_window记录。最重要的字段有:

其它相关的窗口操作字段有:

本章中我们会为library.checkout模型添加视图类型。这样不仅可展示表单和树状/列表视图,还能展示其它的视图类型。

要使用的视图类型必须要在窗口操作中指定。所以我们先编辑library_checkout/views/library_menu.xml文件新增一些视图类型,如下高亮行所示:

这些修改尚未完成,对应视图类型在添加到窗口操作的view_mode之前需要先实现。

除菜单项或视图按钮外,操作也可用于Action上下文菜单中,它们位于搜索框中。下一节中会详细讲解。

对Action上下文菜单添加选项

窗口操作也可用于Action菜单按钮,它位于表单视图的顶部,以及选中了记录的列表视图中:
图10.1:Action上下文菜单

图10.1:Action上下文菜单

该菜单具有上下文的原因是操作会应用到当前所选中的一条或多条记录。

要在Action菜单中添加操作,还需要对窗口操作设置两个字段:

相关的示例已经在library_checkout模块中进行了实现,位于wizard/checkout_mass_message_wizard_view.xml文件中。拷贝如下供读者参考:

以上代码中与Action菜单绑定相关的代码配置已做了高亮显示。

下图描述了对应的窗口菜单项:

图10.2:发送消息操作菜单选项

ODOO 13中的变化

Odoo 13中对操作绑定字段做了调整(注:binding_model)。截至Odoo 12,src_model设置绑定并使用模型标识符,如library.checkout。现在它可用于表单视图,也可通过设置multitrue用于列表视图。

一旦触发了窗口操作,就会打开相应的视图。最常用的视图类型是表单和列表视图。下一节中详细讲解如何创建表单视图。

分析表单视图结构

表单视图是用户与数据记录进行交互的主要方式。表单视图要么按照简单布局,要么按业务文档布局,与纸质文档相似。本节我们将学习如何设计这些业务文档视图以及使用可用的元素和组件。

第八章 Odoo 15开发之业务逻辑 – 业务流程的支持中,我们创建了图书借阅表单模型并为其准备了一个基本表单。这里我们会重新查看并扩展它。

下图展示了完成后表单的截图:

图10.3:改进后的借阅表单视图

在本章中逐步添加不同元素时读者可以参照上图。

使用业务文档视图

曾经各组织使用纸质表单来支撑内部流程。业务应用模型支持这些纸质表单的数字化版本,而在流程上,它们可以添加自动化使操作更为高效。

对于更友好的用户界面,表单视图可以模仿这些纸质文档,帮助用户可视化他们曾在纸质表单上做的处理。

例如,对于图书馆应用,图书借阅可能就是一个需要填写纸质表单的流程。让借阅表单与纸质文档相似可能就是个好做法。

业务文档是一个包含两个元素的表单:<head>区和<sheet>区。头部包含按钮和控制文档业务流的微件,而sheet包含着实际的文档内容。在sheet区之后,也可以添加消息和活动微件。

要对借阅表单添加这一结构,先编辑library_checkout/views/checkout_view.xml文件并修改表单视图记录为如下基本框架:

视图名称是可选的,在不写时会自动生成。为简化起见,在以上的视图记录中省略了<field name="name">元素。

当前<head>区和<sheet>区是空的,我们接下来会扩展。

底部的消息区使用了mail插件模块中提供的微件,在第八章 Odoo 15开发之业务逻辑 – 业务流程的支持中进行过讲解。

我们先来学习表单头部区域。

添加header区

头部通常用于文档所走过的生命周期和相关的操作按钮。这些操作按钮是普通的表单按钮,下一步操作的按钮可高亮显示来辅助用户使用。

添加头部按钮

我们先对当前的空header区添加一个按钮。

编辑表单视图中的<header>版块,添加一个将归借阅设置为完成(done)的按钮:

使用以上代码,我们通过type=”object”在头部添加了一个Return Books按钮,表示会调用一个模型方法。name=”button_done” 声明了要调用的方法名。

class=”oe_highlight”用于高亮显示按钮。在有多个按钮可供选择时,主操作或更常用的操作可以进行高亮帮助用户使用。

attrs按钮用于让按钮仅在为指定的状态时才显示。它应当在open状态时显示,因此应当将不可见设置为newdonecancel状态。

该条件使用state字段,否则不在表单中使用。为使attrs状态可用,需要将state字段加载至客户端。将其添加为隐藏字段以确保加载。

在特定情况下会使用特殊的state字段名,通过attrs实现的可见性条件可通过更简单的states属性达成。states属性列出元素可见时的状态。

通过将attrs替换为states,按钮仅在open状态时显示的代码如下:

attrsstates元素可见功能也可用于其它视图元素,如字段。本章后续会深入讨论。

要让按钮可以使用,我们还需要实现调用的方法。在library_checkout/models/library_checkout.py file文件的checkout类里添加以下方法:

该方法首先查找阶段中匹配done状态的首条记录。它会用于设置该阶段的记录。

self记录集通常是单条记录,但该API允许对多记录的记录集调用,因此需要处理这种可能性。通过对self添加for循环即可实现。然后,对于self记录集中的每条记录,都必须将stage_id字段设置为done阶段。

在按钮旁,头部可包含一个状态栏微件来展示可用的阶段或状态。

添加状态栏管道

头部另一个有用的元素是表示流程步骤以及当前文档所处步骤的管道图。这可以基于阶段或状态列表。管道微件可以能点击或不能点击,以防我们只希望通过按钮做出修改。

状态栏微件通过带statusbar微件的<field>元素来添加。我们使用借阅模型中的stage_id字段:

statusbar微件可用于state选择字段或stage多对一字段。这两种字段在Odoo很多核心模块中都能找到。

clickable选项允许用户通过点击状态栏修改文档阶段。启用它为用户提供了灵活性。但也存在需要对工作流进行更多控制的情况,要求用户能通过操作按钮推进各阶段。

ODOO 12中的变化

截至Odoo 11,可点击选项是一个字段属性<field widget="statusbar" clickable="True" />。在Odoo 12中,将其转化成了一个微件选项<field widget="statusbar" options="{'clickable': True}" />

fold_field选项用于重要度更低的阶段,比如已取消,隐藏(折叠)有More阶段组下面。折叠的阶段必须要有布尔字段标识它们。fold_field设置为用于这一目的的字段名。本例中的名称为fold

使用状态代替阶段

阶段是一个使用了模型来设置流程步骤的多对一字段。它很灵活,可由终端用户配置来适配具体的业务流程,对看板也有很好的支持。图书借阅模型就使用了它。

状态是一个包含了流程步骤的封闭选择列表,如新建、处理中和完成。可用于业务流程,因为可用状态无法修改。但终端用户无法配置它。

每种方法都有优缺点。可以通过使用阶段并将每个阶段映射到状态来取两者之长。借阅模型这么实现了,在借阅阶段模型中添加了状态字段 ,通过关联字段可也在借阅模型中直接可用。

如果模型只使用状态,也可以通过statusbar微件使用状态栏管道。但无法使用fold_field选项,不过可使用statusbar_visible属性列出可见的状态。

使用带状态字段的状态栏如下所示:

注意并没有在library_checkout模型中使用以上代码。因其支持更灵活的阶段,我们更倾向于在用户界面中进行使用。

至此我们完成了头部区,下面来看主表单区。

设计文档单据

单据画布是表单的主区域,这里放置实际的数据元素。设计上类似一张真实的纸质文档。

通常文档单据结构包含如下区域:

文档经常包含详细的代码行。通常展现在notebook的第一页。

预计的XML结果如下:

在单据之后,通常会有一个聊天器微件,包含有文档关注者、讨论消息和计划活动。

下面逐一了解这些区域。按钮框会在稍后讨论,所以接下来讨论头部标题。

添加头部标题

头部标题通常以大字母显示文档的标题。可能会接副标题,旁边也可能会有图片。

首先需要对借阅模型添加几个字段。用于表示标题的字段以及用于表示借阅者的图片。编辑library_checkout/models/library_checkout.py文件添加如下代码:

头部标题位于<div class="oe_title">元素中。可使用常规的HTML元素,如divspanh1h3

在以下代码中,扩展了<sheet>元素来包含标题以及副标题等其它字段:

以上的XML渲染包含:

<group>元素外的字段没有对应渲染的标签。上面的XML没有<group>元素,因此需要显式添加标签。

在标题元素后,通常会有头部字段,按组进行组织。

使用组来组织表单内容

表单的主要内容应用使用<group>标签来组织。

<group>标签在画面中插入两列。在组内添加的字段两列,一列用于字段标签,一列用于字段值微件。向组添加更多字段会在垂直方向堆叠,因新字段会在新行中添加。

常见的样式是两列字段并排。可以在顶层组内嵌套两个<group>标签来实现。

继续编辑我们的表单视图,我们会使用它在标题的<div>区域添加主内容:

顶级的<group>元素在画面中创建了两列内容。嵌套的两个<group>元素各占一列。第一个嵌套组使用左列,而第二组占据右列。

<group>有赋值一个name。这不是必须的,但推荐使用以便更易于扩展模块。

<group>元素也可以带string属性,用于为其显示标题文本。

ℹ️Odoo 11中的变化
string 属性不能再作为继承的锚点,因为相应文本会进行翻译,这会使用继承视图失效。应使用name属性来代替它。

以下元素可用于调整视图布局:

colcolspan属性对网格布局提供了额外的控制:

以下代码显示另一个版本的顶级组元素,使用col="4"在两列是展示4个字段。

注意字段的顺序不同,因为是先从左到右,再从上到下放。<span colspan="2">元素用于占据第二行的前两列,这样close_date字段就可以占后两列了。

有些表单也包含notebook区,用于在不同页面中组织其它字段。

选项卡笔记本(Tabbed notebooks)

另一种组织表单内容的方式是notebook元素,一个包含多个选项卡页面(page)的容器。它们可以让不常用的内容在不使用时隐藏起来,或者用于按主题组织大量字段。

借阅表单中会有一个notebook元素,第一页中包含借阅图书列表。为此,在上一节添加的<group name="group_top">代码后,添加如下XML:

这个notebook只包含一页。要添加更多页,只需要在<notebook>元素中添加更多的<page>元素即可。页面画布默认不会渲染字段标签。需要显示的话,应将字段放在<group>内,就像在表单主画布中的那样。

本例中我们在页面中添加了一对多字段line_ids,没有使用<group>元素,所以不会渲染出标签。

page元素支持以下属性:

本节讨论了表单视图的典型布局,以及使用时大部分重要元素。最重要的元素是数据字段。下一节会进行详细讨论。

使用字段

在表单或列表视图中,使用字段微件展示和编辑模型字段数据。

视图字段中有一些属性。大部分属性字段都从模型定义中获取默认值,但也可以在视图中重写。

以下可用来快速查看字段的可用属性:

一些特定字段支持的属性如下:

还有两个话题值得进一步讨论。一个是如何对字段标签的展示做额外的控制,另一个是使用不同的网页客户端微件实现更好的用户体验。

修改字段标签

不在<group>元素内的字段不会自动渲染标签。组中隐藏需要显式地使用nolabel=”True”来进行标记。

可使用<label for="..."/>元素显式地添加标签。这样可以更好地控制字段标签的显示位置。以下是在表单标题中使用的代码:

for属性获取标签文本的字段。可选的string属性可以为标签设置指定文本。也可以使用CSS类。前面的代码使用了:

这可用于控制字段标签如何展示。字段数据的显示方式也可以通过其它微件进行调用。

选择字段微件

字段内容通过网页客户端微件进行展示。这会影响到数据对用户的展现,以及设置值时的交互。

每个字段类型按照对应的默认微件进行显示。但还有一些替代微件可供选择。

文本字段微件

对于文本字段,有如下组件:

数字字段微件

 

 

 

 

对于数字字段,有以下组件:

对于关联和选择项字段,有以下附加组件:

ℹ️Odoo 11中的修改
state_selection在 Odoo11中引入来替换掉kanban_state_selection。后者被淘汰,但为保持向后兼容性,还支持使用。

关联字段

在关联字段中,我们可让用户操作做一些额外控制。默认用户从这些字段中创建新记录(也称作“快速创建”)并打开关联记录表单。可通过options字段属性来关闭:

context和domain也是字段属性并对于关联字段特别有用。context可定义关联字记录默认值,domain 可限制可选记录。常见的示例为让一个字段依赖其它字段值来产生选择项。domain可在模型中直接定义,但也可在视图中进行覆盖。

在to-many字段中,我们还可使用 mode 属性来更改用于显示记录的视图类型。默认为 tree,但还有其它选项:form, kanban或graph。关联字段可定义行内指定视图来使用。这些视图在元素中的嵌套视图定义中声明。例如,在line_ids借阅中,我们可以为这些线路定义特定的列表和表单视图:

线路列表将带有给定的<tree>定义。当我们与线路交互时,弹出一个表单对话框,在<form>定义中包含该结构。

小贴士:如果想要在列表视图的表单弹出窗口中直接编辑one-to-many路线,应使用<tree editable=”top”>或<tree editable=”bottom”>

按钮

按钮支持这些属性:

ℹ️Odoo 11中的修改
在 Odoo 11之前,按钮图标是来自GTK客户端库的图片,并且仅限于addons/web/static/src/img/icons中所保存图片。

ℹ️Odoo 11中的修改
在 Odoo 11中工作流引擎被淘汰并删除。此前的版本中,在支持工作流的地方,按钮可通过type=”workflow”来触发工作流引擎信号。这时name属性用于工作流的信号名。

智能按钮

在右上角版块中带有智能按钮(smart button)也很常见。智能按钮显示为带有数据指示的矩形,在点击时可进入。

Odoo 中使用的 UI样式是在放置智能按钮的地方带有一个隐藏框,按钮框通常是<sheet>的第一个元素,在<div class=”oe_title”>元素前(以及头像),类似这样:

按钮的容器是一个带有oe_button_box类的 div 元素。在 Odoo 11.0以前,可能需要添加一个oe_right类来确保按钮框在表单中右对齐。在我们的应用中,我们将在按钮中显示图书会员待归还的其它借阅的总数,点击按钮会进入这些项的列表中。

所以我们需要该会员处于 open 状态的借阅记录,排除掉当前借阅。对于按钮统计,我们应创建一个计算字段来在library_checkout/models/library_checkout.py文件的借阅类中进行计数:

下一步我们可以添加按钮框并在其中添加按钮。在<sheet>版块的上方,替换上面的按钮框占位符为以下代码:

按钮元素本身是一个带有显示数据字段的容器。这些数据是使用statinfo特定组件的普通字段。该字段通常是作用于模型中定义的计算字段。除字段外,在按钮中还可以使用静态文本,如<div>Other Checkouts</div>。其它待借阅的数量展示在按钮定义中的num_other借阅字段中。

智能按钮必须带有class=”oe_stat_button” CSS样式,并应使用 icon 属性来带有一个图标。它有一个type=”action”,表示点击按钮时将运行通过 name 属性标识的窗口操作。%(action_other_checkouts_button)d表达式返回要运行的操作的数据库 ID。

在点击按钮时,我们要查看当前会员的其它借阅列表。这可通过action_other_checkouts_button窗口操作来实现。该操作会使用合适的域过滤器打开一个图书借阅列表。操作和相应的域过滤器在表单上下文之外处理,无法访问表单数据。因此按钮必须在上下文中设置当前member_id 来供窗口操作随后使用。使用的窗口操作必须在表单之前定义,因此我们应在 XML 文件根元素<odoo>中的最上方添加以下代码:

注意我们在域过滤器中如何使用default_member_id上下文键。该键还会点击按钮链接创建新任务时为member_id字段设置默认值。域过滤器也需要当前 ID。这无需在上下文中明确设置,因为网页客户端会在active_id上下文键中自动进行设置。

以下是可在智能按钮中添加的属性,供您参考:

动态视图元素

视图元素还支持一些允许视图按字段值动态变更外观或行为的属性。我们可以有onchange 事件来在编辑表单数据时修改其它字段值,或在满足特定条件时让字段为必填或显示。

onchange 事件

onchange机制允许我在某一特定字段变更时修改其它表单字段。例如一个商品字段的 onchange可以在商品被修改时设置价格字段为默认值。在老版本中,onchange 事件在视图级别定义,但8.0之后直接在模型层中定义,无需在视图上做任何特定标记。这通过使用@api.onchange(‘field1’, ‘field2’, …) 装饰器创建模型,来对一些字段绑定 onchange 逻辑。onchange 模型方法在第八章 Odoo 12开发之业务逻辑 – 业务流程的支持中详细讨论过,其中还有相关示例。

onchange 机制还可以在用户输入时即时反馈进行计算字段的自动重算。继续使用商品来举例,如果在修改商品时价格字段变化了,它还会根据新的价格自动更新计算后的总金额字段。

动态属性

一些属性允许我们根据记录的值来动态变更视图元素的显示。指定用户界面元素的可见性可通过如下属性很方便地控制:

除这些以外,我们有一些灵活的方法来根据客户端动态生成的表达式设置元素可见性。它是一个特别属性 attrs,它的值为一个映射invisible属性值与表达式结果的字典。例如,要让closed_date字段在new和open状态时不可见,可使用如下代码:

invisible不只在字段中可用,在任意元素中均可用。例如,它可用于 notebook 页面和group元素中。attrs属性也可为其它两个属性设置值:readonly和required。它们仅对数据字段有意义,通过二者来让字段可编辑或为必填。这让我们可以实现一些基础客户端逻辑,如根据其它字段值(如 state)来让字段设为必填。

列表视图

学到这里可能不太需要介绍列表视图了,但它还一些有趣的额外属性可以讨论。下面我们修改library_checkout/views/checkout_view.xml文件来改进第八章 Odoo 12开发之业务逻辑 – 业务流程的支持中的版本:

行文本颜色和字体可根据 Python 表达式计算结果来动态变化。这通过decoration–NAME属性带上计算字段属性的表达式来实现。NAME可以是bf或it,分别表示粗体和斜体,也可以是其它Bootstrap文本上下文颜色:danger, info, muted, primary, success或warning。Bootstrap文档中有相关显示示例。

ℹ️Odoo 9中的修改
decoration-NAME 属性在 Odoo 9中引入。在 Odoo 8中使用是 colors 和 fonts 属性。

记住表达式中使用的字段必须要在<field>字段中声明,这样网页客户端才知道要从服务端获取该列。如果不想对用户显示,应对其使用invisible=”1″属性。其它 tree 元素的相关属性有:

列表视图可包含字段和按钮,表单中的大部分属性对它们也有效。在列表视图中,数值字段可显示为对应列的汇总值。为字段添加一个累加属性(sum, avg, min或max)会为其分配汇总值的标签文本。我们在 num_books 字段中添加了一个示例:

num_books字段计算每个借阅中的图书数量,它是一个计算字段,我们需要在模型进行添加:

搜索视图

可用的搜索选项通过<search>视图类型来定义。我们可以选择在搜索框中输入时自动搜索的字段。还可以预置过滤器,通过点击启用,以及在列表视图中的预置分组选项。图书借阅的搜索视图可设置如下:

在<search>视图定义中,可以看到两个member_id和user_id的简单元素,当用户在搜索框中输入时,推荐下拉框中会显示对这些字段的匹配。然后有两个使用域过滤器的预置过滤器。可在搜索框下方的 Filter 按钮下选择。第一个过滤器是 To Return 图书,也就还处于 open 状态的图书。第二个过滤器是当前图书管理员处理的图书,通过当前用户的 user_id (可在上下文的 uid 键中获取)过滤。

这两个过滤器可以分别被启用并以 OR运算符连接。以<separator />元素分隔的整块过滤器以 AND 运算符连接。

第三个过滤器仅设置 group by 上下文键,它让视图按照字段来对记录分组,本例中为 member_id 字段。

字段元素可使用如下属性:

过滤元素有以下可用属性:

其它视图类型

表单、列表和搜索视图是最常用的视图类型。但还有一些其它的视图类型可用于设计用户界面。对于前述三种基本视图类型我们已经很熟悉了,在第十一章 Odoo 12开发之看板视图和用户端 QWeb中将详细介绍看板视图,它会将记录可视化为卡片形式,甚至会按列组织为看板。下面我们将学习一些其它视图类型:

以下两种视图类型用于显示累加数据:

还有更多的视图类型,但仅在 Odoo 企业版中可用。因为我们整个系列的文章是基于社区版的,所以无法为这些视图提供示例:

官方文档中提供了对所有视图和可用属性很好的参考,这里就不再重复。我们集中于提供一些基础使用示例,这样可以对这些视图入门。这样应该可以提供一个很好的基础,然后可进一步探索每个视图的所有功能。

小贴士:可通过社区插件模块查看其它视图类型。OCA 管理的网页客户端插件请见 GitHub 仓库。例如,web_timeline模块提供了一个时间线视图类型,也可像甘特图那样展示计划信息,它是社区版的 gantt 视图类型。

活动视图

活动视图类型是内置的计划活动汇总板,帮助用于可视化活动任务。由 mail 模块提供,因此需要先安装该模块才能使用这一视图类型。要使用这一类型,只需在窗口操作的 view_code 属性的视图列表中添加活动视图类型即可。实际的视图定义会自动生成,我们也可以手动进行添加,唯一的选项是修改 string 属性,但在UI 中并不使用。

作为参考,活动视图的定义类似这样:

日历视图

从名称可以看出,该视图类型在日历中展示记录,可通过不同时间区间浏览:按月、按周或按日。以下是我们图书借阅的日历视图,根据请求日期在日历上显示各项:

补充:请记得在菜单xml文件中加回前文删除的 calendar 类型

基础的日历属性有:

ℹ️Odoo 11中的修改
dipsplay 日历属性在 Odoo 11中删除。此前的版本中,它用于自定义日历项标题文本的格式,例如display=”[name], Stage [stage_id]”。

透视表视图

还可通过透视表查看数据,它是一个动态分析矩阵。为此我们可使用透视表视图。

ℹ️Odoo 9中的修改
透视表在 Odoo 8中就已存在,作为一个图表视图功能。在 Odoo 9中,它成为一个独立的视图类型。同时也增强了透视表功能、优化了透视表数据的获取。

数据累加仅对数据库中存储的字段可用。我们将使用num_books字段来展示一些借书数量的统计。它是一个计算字段,还没有存储在数据库中。要在这些视图中使用,需要通过添加store=True属性先将其存储在数据库中:

使用如下代码来为图书借阅添加数据透视表:

图表和透视表视图应包含描述轴和度量的字段元素,两者的属性大多数都通用:

图表视图

图表视图将数据累加展示为图表,可以使用柱状图、线状图和饼图。下面来为图书借阅添加图表视图:

图表视图元素可带有一个type属性,值可为 bar(默认), pie或line。对于 bar,可使用额外的stacked=”True”属性来让柱状图叠放起来。图表使用两种类型字段:

图表和透视表视图应包含描述需使用的轴和度量的字段元素。大多数图表视图中的属性同样可在透视表视图中使用。

总结

本文中我们学习了更多创建用户界面的 Odoo 视图。我们深入讲解了表单视图,然后一起概览了其它视图类型,包括列表视图和搜索视图。我们还学习了如何向视图元素添加动态行为。

下一篇文章中,我们将学习本文中未涉及到的视图:看板视图以及它使用的模板语言 QWeb。

 

☞☞☞第十一章 Odoo 12开发之看板视图和用户端 QWeb

 

扩展阅读

以下本文中所讨论的话题的附加参考和补充材料:

 

退出移动版