查看“基于自定义SQL的报告”的源代码
←
基于自定义SQL的报告
跳转至:
导航
、
搜索
因为以下原因,你没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看并复制此页面的源代码:
我们所建的报告是建立在常规记录的基础上的。但在某些情况下,在呈现报表时,我们需要以不易处理的方式转换或聚合动态数据. 一种方法是编写一个SQL查询来构建我们需要的数据集,通过一个特殊的模型公开这些结果,并使我们的报告在这个记录集上工作。 因此,我们需要创建一个包含以下代码的文件reports/todo_task_report.py: <nowiki> # -*- coding: utf-8 -*- from odoo import models, fields class TodoReport(models.Model): _name = 'todo.task.report' _description = 'To-do Report' _sql = """ CREATE OR REPLACE VIEW todo_task_report AS SELECT * FROM todo_task WHERE active = True """ name = fields.Char('Description') is_done = fields.Boolean('Done?') active = fields.Boolean('Active?') user_id = fields.Many2one('res.users', 'Responsible') date_deadline = fields.Date('Deadline') </nowiki> 要加载这个文件,我们需要在__init__.py文件顶部添加from . import reports,并且在reports/__init__.py文件中添加from . import todo_task_report。 sql 属性会自动翻译为SQL语句,创建时重写覆盖数据库表。我们希望它创建一个数据库视图来提供报告所需的数据。虽然我们的SQL查询非常简单,但我们可以为视图使用任何有效的SQL查询。 我们还映射了我们需要的ORM字段类型的字段,所以它们在此模型上生成的记录集上可用。 接下来,我们可以为这个模型添加一个新的报告: <nowiki> reports/todo_model_report.xml: <odoo> <report id="action_todo_model_report" string="To-do Special Report" model="todo.task" report_type="qweb-html" name="todo_report.report_todo_task_special" /> <template id="report_todo_task_special"> <t t-call="report.html_container"> <t t-call="report.external_layout"> <div class="page"> <!-- Report page content --> <table class="table table-striped"> <tr> <th>Title</th> <th>Owner</th> <th>Deadline</th> </tr> <t t-foreach="docs" t-as="o"> <tr> <td class="col-xs-6"> <span t-field="o.name" /> </td> <td class="col-xs-3"> <span t-field="o.user_id" /> </td> <td class="col-xs-3"> <span t-field="o.date_deadline" /> </td> </tr> </t> </table> </div> </t> </t> </template> </odoo></nowiki> 对于更复杂的情况,我们可以使用不同的解决方案:向导。为此,我们应该创建一个生成相应行的瞬态模型,包括其中的标题、用户引入的报表参数,报告所使用的数据。这些行是由一个包含我们任何逻辑的模型方法生成的。强烈建议从现有的类似报告中获得灵感。
返回至
基于自定义SQL的报告
。
导航菜单
个人工具
登录
命名空间
页面
讨论
变种
视图
阅读
查看源代码
查看历史
更多
搜索
导航
首页
最近更改
随机页面
odoo 中文开发手册
odoo 开发参考
odoo 实施笔记
Odoo 最佳方案
关于 OdooV
Odoo FAQ
工具
链入页面
相关更改
特殊页面
页面信息
友情链接
odoo官网
odoo中文网
odoo实施