高级视图
树型视图
树型视图可以通过更多的属性设置实现更灵活的客户化功能:
decoration-{$name}
允许根据数据记录的属性设置每行文本的样式。值是 Python 表达式。 对于每一条记录,该表达式都将根据数据记录的属性值进行判断,如果为 true
,则对应的样式应用到该行。其他的上下文有:uid
(当前用户的标识) 和 current_date
(当前日期yyyy-MM-dd
格式的字符串)。{$name}
可以是 bf
(font-weight: bold
)、it
(font-style: italic
), 或者其他 bootstrap contextual color (danger
、info
、muted
、primary
、 success
或者 warning
)。
<tree string="Idea Categories"
decoration-info="state=='draft'"
decoration-danger="state=='trashed'">
<field name="name" />
<field name="state" />
</tree>
editable
可以为 "top"
或者 "bottom"
。设置视图的可操作的显示位置(包括表单视图),该值定义了“新建行”的显示位置。. Makes the tree view editable in-place (rather than having to go through the form view), the value is the position where new rows appear.
高级视图练习:8-1
列表颜色:
修改 Session 树型视图,对于培训持续时间小于5天的用蓝色标识,大于15天的用红色标识。
openacademy/views/openacademy.xml
# 注意下述这行代码,否则提示 duration 未定义;
<field name="duration" invisible="1"/>
日历视图
用日历事件的方式显示数据记录。根元素是 <calendar>
,常用的属性包括:
color
用于颜色区隔(color segmentation)的字段名称。颜色自动分配到事件,在同一颜色区间的事件(数据记录的 @color
字段具有相同的值)使用同一颜色显示。
date_start
数据记录作为事件起始日期(时间)的字段名称。
date_stop
(可选)
数据记录作为事件结束日期(时间)的字段名称。
field 元素(定义每个事件使用哪个属性的值作为标签-label)
<calendar string="Ideas" date_start="invent_date" color="inventor_id">
<field name="name" />
</calendar>
高级视图练习:8-2
日历视图:
为 Session 实体添加日历视图,以事件方式查看培训。
添加
end_date
计算字段,根据start_date
和duration
字段计算;(提示:inverse
函数允许该字段可写,允许用户在日历视图上拖拽培训。)为 Session 添加日历视图;
将日历视图添加到 Session 实体的操作中;
搜索视图
搜索视图的 <field>
元素可以定义 @filter_domain
属性,以指定改字段搜索时使用的条件。在定义规则时, self
表示用户输入的值。下面的示例中,表示搜索 name
和 description
字段。
搜索视图也可以包含 <filter>
元素,表示如何使用预定义的搜索条件。预定义的搜索条件必须是下列属性之一:
domain
将搜索条件添加到当前搜索中;
context
为当前搜索添加一些上下文;使用 group_by
指定的字段名对结果进行分组;
<search string="Ideas">
<field name="name"/>
<field name="description" string="Name and description"
filter_domain="['|', ('name', 'ilike', self), ('description', 'ilike', self)]"/>
<field name="inventor_id"/>
<field name="country_id" widget="selection"/>
<filter name="my_ideas" string="My Ideas"
domain="[('inventor_id', '=', uid)]"/>
<group string="Group By">
<filter name="group_by_inventor" string="Inventor"
context="{'group_by': 'inventor_id'}"/>
</group>
</search>
如果要使用非缺省的搜索视图,需要在操作记录上指定 search_view_id
字段的值,使其指向要使用的搜索视图。
操作也可以通过 context
字段设置搜索条件的缺省值: 上下文关键字的格式是 search_default_field_name
,将根据给定的值初始化 field_name
的搜索条件。使用缺省值的搜索条件必须有一个可选的 @name
属性。
高级视图练习:8-3
搜索视图:
- 为 Course 添加一个筛选按钮,搜索当前用户负责的课程,并且设置为缺省的搜索视图;
- 添加一个按钮,按负责用户对课程进行分组;
甘特视图
水平条形图典型应用是显示项目的计划和进度,它的根元素是 <gantt>
。
<gantt string="Ideas"
date_start="invent_date"
date_stop="date_finished"
progress="progress"
default_group_by="inventor_id" />
高级视图练习:8-4
甘特视图:(odoo 社区版不支持甘特视图?)
添加甘特视图,显示培训的计划,培训应该按照instructor
分组。
- 创建一个计算字段,表示培训的持续小时数;
- 添加甘特视图定义,并添加到 Session 实体的操作中;
图形视图
图形视图允许以聚合的方式浏览和分析实体,它的根元素是 <graph>
。
备注:透视视图(根元素是
<pivot>
)是一个多维表格,允许用户选择筛选条件、维度以查看特定的聚合数据。透视视图与图形视图共享视图定义。
图形视图有 4 种显示模式,缺省模式由 @type
属性指定。
Bar(缺省)
条形图,第一个维度用于定义水平坐标的分组,其他维度定义每个分组的聚合。
缺省情况下,条形图的“条”是水平顺序排列的,可以设置 <graph>
的 @stacked="True"
,显示“堆叠条形图”。
Line
二维线形图;
Pie
二维饼图;
图形视图的 <field>
元素必须设置 @type
属性为下列值之一:
row
(缺省)
该字段缺省用于聚合(分组);
measure
该字段被聚合(聚合函数);
<graph string="Total idea score by Inventor">
<field name="inventor_id"/>
<field name="score" type="measure"/>
</graph>
警告:图形视图是对数据库数值进行聚合处理,不支持非存储的计算字段。
高级视图练习:8-5
图形视图:
为 Session 添加图形视图,使用条形图显示每个课程的参加人数。
- 添加参加人数的存储计算字段;
- 添加相关的视图;
看板视图
用于组织和管理任务、产品处理,等等。它的根元素是 <kanban>
。
看板视图显示一系列卡片,按列的方式进行分组处理。每个卡片对应一条数据记录,每列对应聚合字段的值。
例如:项目任务可以按照阶段(每列是一个阶段)组织,或者按照负责人(每列是一个用户)组织,以及其他等等方式。
看板视图的卡片结构可以使用表单元素(包括基本的 HTML 元素)和 QWeb 元素。
高级视图练习:8-6
看板视图:
为 Session 添加看板视图,按 Course 分组(每列是 Course)。
- 为 Session 实体添加一个整数型的
color
字段;- 添加看板视图并修改相应的动作;