高级视图

树型视图

树型视图可以通过更多的属性设置实现更灵活的客户化功能:

decoration-{$name}

允许根据数据记录的属性设置每行文本的样式。值是 Python 表达式。 对于每一条记录,该表达式都将根据数据记录的属性值进行判断,如果为 true,则对应的样式应用到该行。其他的上下文有:uid(当前用户的标识) 和 current_date(当前日期yyyy-MM-dd 格式的字符串)。{$name} 可以是 bffont-weight: bold)、itfont-style: italic), 或者其他 bootstrap contextual colordangerinfomutedprimarysuccess 或者 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 实体添加日历视图,以事件方式查看培训。

  1. 添加 end_date 计算字段,根据 start_dateduration 字段计算;(提示: inverse 函数允许该字段可写,允许用户在日历视图上拖拽培训。)

  2. 为 Session 添加日历视图;

  3. 将日历视图添加到 Session 实体的操作中;

openacademy/models/models.py

openacademy/views/openacademy.xml

搜索视图

搜索视图的 <field> 元素可以定义 @filter_domain 属性,以指定改字段搜索时使用的条件。在定义规则时, self 表示用户输入的值。下面的示例中,表示搜索 namedescription 字段。

搜索视图也可以包含 <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

搜索视图:

  1. 为 Course 添加一个筛选按钮,搜索当前用户负责的课程,并且设置为缺省的搜索视图;
  2. 添加一个按钮,按负责用户对课程进行分组;

openacademy/views/openacademy.xml

甘特视图

水平条形图典型应用是显示项目的计划和进度,它的根元素是 <gantt>

<gantt string="Ideas"
       date_start="invent_date"
       date_stop="date_finished"
       progress="progress"
       default_group_by="inventor_id" />

高级视图练习:8-4

甘特视图:(odoo 社区版不支持甘特视图?)
添加甘特视图,显示培训的计划,培训应该按照 instructor 分组。

  1. 创建一个计算字段,表示培训的持续小时数;
  2. 添加甘特视图定义,并添加到 Session 实体的操作中;

openacademy/models/models.py

openacademy/views/openacademy.xml

图形视图

图形视图允许以聚合的方式浏览和分析实体,它的根元素是 <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 添加图形视图,使用条形图显示每个课程的参加人数。

  1. 添加参加人数的存储计算字段;
  2. 添加相关的视图;

openacademy/models/models.py

openacademy/views/openacademy.xml

看板视图

用于组织和管理任务、产品处理,等等。它的根元素是 <kanban>

看板视图显示一系列卡片,按列的方式进行分组处理。每个卡片对应一条数据记录,每列对应聚合字段的值。

例如:项目任务可以按照阶段(每列是一个阶段)组织,或者按照负责人(每列是一个用户)组织,以及其他等等方式。

看板视图的卡片结构可以使用表单元素(包括基本的 HTML 元素)和 QWeb 元素。

高级视图练习:8-6

看板视图:
为 Session 添加看板视图,按 Course 分组(每列是 Course)。

  1. 为 Session 实体添加一个整数型的 color 字段;
  2. 添加看板视图并修改相应的动作;

openacademy/models/models.py

openacademy/views/openacademy.xml

results matching ""

    No results matching ""