### 图像视图
图的视图允许汇总汇总和分析模型,它们的根元素是 `<graph>`.
图形视图有4个显示模式,使用的默认模式是使用 `@type` 属性.
Pivot
多维表,允许各种尺寸的选择得到合适的聚合数据集之前,移动到一个更图形概述
Bar (默认)
一个条形图,第一维是用来定义在水平轴上的组,其他维度定义在每个组中的聚集的酒吧。
默认的酒吧是并排的,他们可以堆叠使用 `@stacked="True"` 在 `<graph>` 上
Line
二维直线图
Pie
2维的饼图
图视图包含 `<field>` 具有强制性 `@type` 属性取值:
`row` (默认)
该字段应为默认聚合
`measure`
该领域应汇总,而不是分组
~~~ xml
<graph string="Total idea score by Inventor">
<field name="inventor_id"/>
<field name="score" type="measure"/>
</graph>
~~~
Warning
图形视图对数据库执行的聚合值,他们不与非存储计算字段。
练习
图像视图
在每一个过程中,在一个条形图的形式下,为每一个过程,显示的次数增加一个图形视图。
1. 添加作为存储计算字段的参与者数量
2. 然后添加相关视图
*openacademy/models.py*
~~~ python
hours = fields.Float(string="Duration in hours",
compute='_get_hours', inverse='_set_hours')
attendees_count = fields.Integer(
string="Attendees count", compute='_get_attendees_count', store=True)
@api.depends('seats', 'attendee_ids')
def _taken_seats(self):
for r in self:
~~~
~~~ python
for r in self:
r.duration = r.hours / 24
@api.depends('attendee_ids')
def _get_attendees_count(self):
for r in self:
r.attendees_count = len(r.attendee_ids)
@api.constrains('instructor_id', 'attendee_ids')
def _check_instructor_not_in_attendees(self):
for r in self:
~~~
*openacademy/views/openacademy.xml*
~~~ xml
</field>
</record>
<record model="ir.ui.view" id="openacademy_session_graph_view">
<field name="name">openacademy.session.graph</field>
<field name="model">openacademy.session</field>
<field name="arch" type="xml">
<graph string="Participations by Courses">
<field name="course_id"/>
<field name="attendees_count" type="measure"/>
</graph>
</field>
</record>
<record model="ir.actions.act_window" id="session_list_action">
<field name="name">Sessions</field>
<field name="res_model">openacademy.session</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form,calendar,gantt,graph</field>
</record>
<menuitem id="session_menu" name="Sessions"
~~~