- 上传者: Administrator
- 上传时间:2023年12月06日 08时16分36秒
SQL视图是一种创建定制报表的技术,用于显示无法使用现有模型字段和视图显示的数据。换句话说,这种技术有助于避免仅用于数据分析目的而创建和计算额外字段的不必要操作。 创建一个模型 None [1] ** SQL视图的创建方式与标准模型类似: from odoo import fields , ......
_auto = False
表示我们不希望将模型存储在数据库中_rec_name
表示模型的哪个字段代表记录的名称(即在打开记录的表单视图时将在导航面包屑中使用的名称)重写
BaseModel.init()
方法,设置
_table_query
属性。
SQL视图是一种创建定制报表的技术,用于显示无法使用现有模型字段和视图显示的数据。换句话说,这种技术有助于避免仅用于数据分析目的而创建和计算额外字段的不必要操作。
创建一个模型
SQL视图的创建方式与标准模型类似:
from odoo import fields, models
class ModuleReport(models.Model):
_name = 'module.report'
_description = "Module Report"
_rec_name = 'module_field'
_auto = False
属性:
并且其字段的定义方式与标准模型相同,只是每个字段都标记为 readonly=True
。
注解
不要忘记将您的新模型添加到安全文件中。
填充模型
有两种方法来填充SQL视图的表:
无论使用哪种方式,都将执行 SQL 查询来填充模型。因此,可以使用任何 SQL 命令来收集和/或计算所需的数据,并且您需要记住您正在绕过 ORM(如果您还没有阅读过 Odoo中的安全性,这是一个好主意)。从 SELECT
返回的列将填充模型的字段,因此请确保您的列名与字段名匹配,或者使用匹配的别名。
在大多数情况下,覆盖 BaseModel.init()
方法是标准且更好的选项。它需要导入 tools
并通常写成以下形式:
def init(self):
tools.drop_view_if_exists(self.env.cr, self._table)
self.env.cr.execute("""CREATE or REPLACE VIEW %s as (
SELECT
%s
FROM
%s
)""" % (self._table, self._select(), self._from()))
tools.drop_view_if_exists
确保在执行 SQL 查询时不会创建冲突的视图。将查询的不同部分分开是标准的做法,以便更容易进行模型扩展。如何在方法之间拆分查询并没有标准化,但至少 _select
和 _from
方法是常见的,当然,所有这些方法都会返回字符串。
使用模型
您的SQL视图的视图和菜单项的创建和使用方式与任何其他Odoo模型相同。您已经准备好开始使用您的SQL视图了。玩得开心!
额外提示
小技巧
在SQL视图中常见的错误是没有考虑到由于表JOIN而导致的某些数据的重复。这可能会导致在使用字段的 group_operator
和/或透视视图时计数错误。最好使用足够的数据测试您的SQL视图,以确保结果字段的值符合您的预期。
小技巧
如果您有一个字段不想作为度量(即在您的透视表或图表视图中),请在其上添加 store=False
,它将不会显示。
- 微信扫一扫,一分也是爱:
-
服务原则及地区范围
宜兴通达网络科技有限公司,地处中国宜兴环科园内,是一家高新技术企业。公司在企业网络维护和企业信息化建设与咨询方面,有10多年经验。
我公司愿与客户一道,力求彻底解决客户问题!
我们不是在给企业提供“头痛医头、脚痛医脚”的暂时解决方案,而是在部署根本性安全与稳定服务!!
我们愿携手客户,建立企业IT规划;杜绝随意安装系统、软件等操作;力求共同维护有序、安全、稳定的网络办公环境!!!
IT服务,服务是根本,客户是上帝;我们提供快速响应、快速上门、快速排查,提供优质高效的服务!!!!
通达科技提供全国范围内的服务,服务形式包括远程协助、电话咨询、电子邮件咨询、传真咨询、问答平台的问题解决等。
宜兴地区提供上门服务:
- 市区服务:宜城街道、城北街道(屺亭街道)、新街街道、新庄街道、环科园、渚桥开发区
- 市郊服务:张渚镇、西渚镇、太华镇、徐舍镇、官林镇、杨巷镇、新建镇、和桥镇、高塍镇、万石镇、周铁镇、芳桥镇、丁蜀镇、湖父镇。