在报表中展示数据

来自Odoo大V社-odoo中文开发手册
跳转至: 导航搜索

不同于看板视图,报表中的QWeb模板是被服务器端用Python解析QWeb后渲染的。我们可以看到这两个完成了相同的规范,但有一些差异我们需要注意的。

首先,QWeb表达式是使用Python语法解析的,不是JavaScript。最简单的表达式,有很少或根本没有区别,但更复杂的操作可能会不同。

表达式的解析方式也是不同的。报表中,我们有以下变量:

 ·docs 是迭代器,包含所有待打印的数据集
 ·doc_ids 是一个包含所有待打印数据集ID的列表
 ·doc_model 是数据集关联的模块标识,如todo.task
 ·time 是Python时间库的引用
 ·user 是运行报表的用户的数据记录
 ·res_company 是当前用户的公司的数据记录

报表内容是用HTML编写的,字段值可以使用t-field属性来引用,t-field-options属性可以使用特定的小部件来呈现字段内容。

现在我们可以开始为报表设计页面内容了:

  <!-- Report page content  
  <div class="row bg-primary"> 
    <div class="col-xs-3"> 
      <span class="glyphicon glyphicon-pushpin" /> 
        What 
    </div> 
    <div class="col-xs-2">Who</div> 
    <div class="col-xs-1">When</div> 
    <div class="col-xs-3">Where</div> 
    <div class="col-xs-3">Watchers</div> 
  </div> 
  <t t-foreach="docs" t-as="o"> 
    <div class="row"> 
      <!-- Data Row Content --> 
    </div> 
  </t>

内容的布局可以使用Twitter的Bootstrap HTML网格系统。简单来说,Bootstrap有一个包含12个列的网格布局。可以使用<div class="row">添加一个新行。在一行中,我们有单元格,每个单元格都有确定数字,最大为12。每个单元可以定义为<div class="col-xs-N ">,其中N为它跨越列的数目。

提示

关于Bootstrap的详细介绍,请参见网址:http://getbootstrap.com

这里我们添加标题行,然后是t-foreach 循环,遍历每个记录,并为每个记录呈现一行。

由于呈现是服务器端完成的,所以记录是对象,我们可以使用点符号(.)访问相关数据记录对应的字段。这让我们很容易通过关系字段访问它们的数据。注意,客户端渲染的Qweb,视图,是不可以这样访问的,如web客户端看板视图。

下面是一条记录行的XML示例:

  <div class="col-xs-3"> 
    <h4><span t-field="o.name" /></h4> 
  </div> 
  <div class="col-xs-2"> 
    <span t-field="o.user_id" /> 
  </div> 
  <div class="col-xs-1"> 
    <span t-field="o.date_deadline" /> 
      <span t-field="o.amount_cost" 
        t-field-options='{ 
          "widget": "monetary", 
          "display_currency": "o.currency_id"}'/> 
  </div> 
  <div class="col-xs-3"> 
    <div t-field="res_company.partner_id" 
      t-field-options='{ 
        "widget": "contact", 
        "fields": ["address", "name", "phone", "fax"], 
                  "no_marker": true}' /> 
  </div> 
  <div class="col-xs-3"> 
    <!-- Render followers --> 
  </div>
 

如我们所见,字段可用于附加选项。这些都是非常类似于表单视图的optionss属性,就像第六章 视图—设计用户界面中,使用了一个附加的widget属性去设置一个渲染字段的小部件。

上面那个例子中,第一个部件就是在截止日期之后使用了一个货币小部件。

第二个更复杂的例子是用于格式化地址的小部件(contact)。我们使用公司地址作为演示,res_company.partner_id,是因为它有一些默认数据,我们可以立即看到渲染的效果。它也适用于用户地址,o.user_id.partner_id。默认情况下, 地址部件(contact)将显示带有一些象形文字的地址,比如手机图标。可以用no_marker="true" 选项可以将它们禁用。