odoo 基于SQL View视图的model类

在做odoo的过程中,会涉及到多表的查询, 尤其是做报表的时候这种情况更甚,这样下来会做很多的关联,不是很方便。odoo提供了一种机制,即基于视图的model类。代码地址在这里

具体过程如下:

1.建立model类mssql.employee

 1 import logging
 2
 3 from odoo import models, fields, api
 4 from odoo import tools
 5
 6 _logger = logging.getLogger(__name__)
 7
 8
 9 class MsslEmployee(models.Model):
10     _name = "mssql.employee"
11     _auto = False
12
13     name = fields.Char(readonly=True)
14     employee_no = fields.Char(readonly=True)
15
16     @api.model_cr
17     def init(self):
18         tools.sql.drop_view_if_exists(self.env.cr, self._table)
19         query = """
20         create view %s as
21         SELECT A.id,  A.login as name, B.street as employee_no
22         FROM res_users A
23         left join res_partner B
24         on A.Id = B.user_id
25         """ % self._table
26         self.env.cr.execute(query)

这里的大体过程和普通的model类差不多,主要区别在于

A. _auto 设置为 False, 即不让odoo框架接管类的处理,而是由我们自己来处理

B.重写init函数。这里的主要工作是建立和表名一样的视图mssql_employee,即有参数self._table决定。这样odoo可以像处理普通的model类一样查询 列表显示 Form显示等。

这里我们简单的进行了视图的建立,根据实际情况开发自己的视图。同时注意视图的字段要和model类中声名的相一致,尤其是不要忘记了id字段。

2. 建立 list form search action menu等菜单部分。这里和普通model类的情况一样。

 1  <!--view list for mssqlemployee-->
 2         <record id="mssql_employee_view_tree" model="ir.ui.view">
 3             <field name="name">mssql_employee_view_tree</field>
 4             <field name="model">mssql.employee</field>
 5             <field name="arch" type="xml">
 6                 <tree>
 7                     <field name="name"/>
 8                     <field name="employee_no"/>
 9                 </tree>
10             </field>
11         </record>
12
13         <record id="mssql_employee_view_form" model="ir.ui.view">
14             <field name="name">mssql_employee_view_form</field>
15             <field name="model">mssql.employee</field>
16             <field name="arch" type="xml">
17                 <form>
18                     <sheet>
19                         <group>
20                             <group>
21                                 <field name="name"/>
22                                 <field name="employee_no"/>
23                             </group>
24                         </group>
25                     </sheet>
26                 </form>
27             </field>
28         </record>
29
30         <record id="mssql_employee_view_search" model="ir.ui.view">
31             <field name="name">mssql_employee_view_search</field>
32             <field name="model">mssql.employee</field>
33             <field name="arch" type="xml">
34                 <search string="Search">
35                     <field name="name" filter_domain="[(‘name‘, ‘ilike‘, self)]"/>
36                 </search>
37             </field>
38         </record>
39
40         <record id="mssql_employee_action" model="ir.actions.act_window">
41             <field name="name">mssql_employee_action</field>
42             <field name="res_model">mssql.employee</field>
43             <field name="view_mode">tree,form</field>
44             <field name="search_view_id" ref="mssql_employee_view_search"/>
45             <field name="help" type="html">
46                 <p class="oe_view_nocontent_create">
47                 Click to create a mssql employee.
48             </p>
49             </field>
50         </record>
51
52         <menuitem name="View Mssql Employee" parent="wechat_news" id="mssql_employee_menu" action="mssql_employee_action" sequence="1"/>

3.安装或升级对应的模块,查看运行效果。

运行时的list效果

 list列表下的筛选效果

Form编辑效果,当然这里没有 因为字段都设置为了只读属性

最后是数据库里面确实多了个msqql_employee视图

这样不管以后遇见多么复杂的多表查询条件或者报表,就多了一种选择,或许是一个不错的思路。

原文地址:https://www.cnblogs.com/crazyguo/p/9682939.html

时间: 2024-10-12 06:34:52

odoo 基于SQL View视图的model类的相关文章

CodeSmith生成SQL Server视图的实体类脚本/对应的生成模板

C#生成sql视图的实体类 using System;using System.Text;using CodeSmith.Engine;using SchemaExplorer;using System.ComponentModel;using System.Data; namespace Common.Data{ /// <summary> /// CodeSmith生成SQL Server视图的实体类脚本 /// </summary> public class ViewUtil

SQL VIEW(视图)

1,视图包含行和列,就像一个真实的表. 2,视图中的字段就是来自一个或多个数据库中的真实的表中的字段. 3,我们可以向视图添加 SQL 函数.WHERE 以及 JOIN 语句,我们也可以提交数据,就像这些来自于某个单一的表. 4.将多个表的字段数据存放在视图中,像是一个虚拟的表 if exists(select name from sys.views where name='mytrigger01') drop trigger mytrigger01 go --创建视图 create view

SQL VIEW(视图)

视图是可视化的表. 本章讲解如何创建.更新和删除视图. SQL CREATE VIEW 语句 什么是视图? 在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表. 视图包含行和列,就像一个真实的表.视图中的字段就是来自一个或多个数据库中的真实的表中的字段.我们可以向视图添加 SQL 函数.WHERE 以及 JOIN 语句,我们也可以提交数据,就像这些来自于某个单一的表. 注释:数据库的设计和结构不会受到视图中的函数.where 或 join 语句的影响. SQL CREATE VIEW

QT——模型/视图(model/view)

数据项中引入模型/视图架构,可以方便的将数据与表现层分开. ------------------------------------- 模型Model:一般来说,Model里面并不真正存储数据(数据少的话也可以直接存储在Model里),只是负责从诸如磁盘文件,数据库,网络通讯等获得源数据,并提供给View,View对数据进行修改,然后再通过Model更新源数据. Model 另一个重要工作时为源数据添加索引(ModelIndex).列表形式采用row/colum编号,树形式为建立父子间的层次关系

QtSQL学习笔记(4)- 使用SQL Model类

除了QSqlQuery,Qt提供了3个高级类用于访问数据库.这些类是QSqlQueryModel.QSqlTableModel和QSqlRelationalTableModel. 这些类是由QAbstractTableModel(继承自QAbstractItemModel)驱动并且它通过一个条目视图类(比如QListView和QTableView)使得表示数据库的数据更加简单.这个详细介绍在“用一个表视图表示数据”一节. 使用这些类的另外一个好处是它使得你的代码能够更容易适用于其他数据源.例如,

SQL-W3School-高级:SQL VIEW(视图)

ylbtech-SQL-W3School-高级:SQL VIEW(视图) 1.返回顶部 1. 视图是可视化的表. 本章讲解如何创建.更新和删除视图. SQL CREATE VIEW 语句 什么是视图? 在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表. 视图包含行和列,就像一个真实的表.视图中的字段就是来自一个或多个数据库中的真实的表中的字段.我们可以向视图添加 SQL 函数.WHERE 以及 JOIN 语句,我们也可以提交数据,就像这些来自于某个单一的表. 注释:数据库的设计和结构

SQL DDL 视图(VIEW)

在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表. 视图包含行和列,就像一个真实的表.视图中的字段就是来自一个或多个数据库中的真实的表中的字段.我们可以向视图添加 SQL 函数.WHERE 以及 JOIN 语句,我们也可以提交数据,就像这些来自于某个单一的表. 注释:数据库的设计和结构不会受到视图中的函数.where 或 join 语句的影响. SQL CREATE VIEW 语法 CREATE VIEW view_name AS SELECT column_name(s) FROM

基于SQL脚本将数据库表及字段提取为C#中的类

开发时,勉不了需要使用SQL直接与数据库交互,这时对于数据库中的表名及字段名会使用的比较多.如果每使用一次都复制一个,实在蛋疼. 所以就考虑将其做成const常量.但是数据库中的表和字段相当多,一个一个敲,不但累,还有可能敲错.要保证正确,最好的办法当然是使用工具或者脚本. 这里提供一个SQL脚本的实现. 原理:获取数据库的表--->遍历每个表中的字段--->生成数据 SQL代码 DECLARE @tableName VARCHAR(MAX) DECLARE @tableCount int D

23 SQL语言——视图 VIEW

理解视图 对于一个重要的表,比如支付宝的用户表,它包含了账户余额,但是我并不希望下级开发人员能看到这个用户的余数字段,怎么办呢? 我就做了一个另一个表,只给出指定的几个字段,下级开发人员对这个表的增删改依然能作用到我原有的表上. 完美! 我做的这另一个表,就叫视图. 视图特点 保护真实表,隐藏重要字段的数据,保护数据 在视图中的操作会映射到真实表中 可以手动开启只读模式 注意:视图的创建需要dba权限.也就是说,只有管理员才能创建视图. 视图的创建和删除 注意:有dba权限的用户才能创建视图 创