Odoo13使用SQL构建报表

Odoo13使用SQL构建报表

1.新建模型CustomSqlModel

# -*- coding: utf-8 -*-
from odoo import api, fields, models, tools


class CustomSqlModel(models.Model):
    _name = 'custom.sql.model'
    _description = "Custom Sql Model"
    #使用此字段后不会自动创建表
    _auto = False

    field_one = fields.Char(readonly=True)
    field_two = fields.Char(readonly=True)
    field_three = fields.Integer(readonly=True)

	#重写init方法
    @api.model_cr
    def init(self):
        tools.drop_view_if_exists(self.env.cr, self._table)
        #必须要查询id
        sql = """
            create or replace view %s as (
                 select 1 as id, 2 as field_one, 3 as field_two , 4 as field_three
            )
        """ % self._table
        self.env.cr.execute(sql)

2.配置权限和菜单

即可在页面中查看到相应报表

Odoo 是一款企业级开源应用程序,它提供了一套完整的业务应用套件。在 Odoo 中,QWEB报表是基于 XML 模板的报表生成工具,它允许开发者使用 XML 语法结合特定的 QWeb 表达式来设计报表。从 Odoo 13 开始,QWEB报表能够直接使用数据库中的数据,这涉及到 SQL 语句的使用。 要使用 SQL 生成 QWEB 报表,首先需要在 Odoo 的模型中定义 SQL 视图。然后,在 QWEB 报表模板中,可以通过特定的指令调用这些视图的数据。以下是一般步骤: 1. 定义 SQL 视图: 在 Odoo 模型中,可以通过 `sql_view` 属性定义一个 SQL 视图,例如: ```python class MyModel(models.Model): _name = 'my.model' _sql_constraints = [('unique_name', 'unique(name)', 'Name must be unique')] _sql_views = { 'my_sql_view': """ CREATE VIEW my_sql_view AS SELECT name, COUNT(*) as cnt FROM my_model GROUP BY name """ } ``` 2. 在 QWEB 报表使用 SQL 数据: 在 QWEB 模板文件(XML)中,可以使用 `<t t-call="web.sql_template">` 来调用定义好的 SQL 视图。例如: ```xml <template id="report_my_sql_data" name="Report SQL Data"> <t t-call="web.sql_template" t-prepare="{'model': 'my.model', 'view_id': ref('my_sql_view')}"> <div> <h2>My SQL Data</h2> <table> <thead> <tr> <th>Name</th> <th>Count</th> </tr> </thead> <tbody> <t t-foreach="rows" t-as="row"> <tr> <td t-esc="row.name"/> <td t-esc="row.cnt"/> </tr> </t> </tbody> </table> </div> </t> </template> ``` 3. 在报表生成时,Odoo 将执行 SQL 视图定义的查询,并将结果以变量的形式提供给 QWEB 模板进行渲染。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值