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

具体过程如下:

1.建立model类mssql.employee

 import logging

 from odoo import models, fields, api
from odoo import tools _logger = logging.getLogger(__name__) class MsslEmployee(models.Model):
_name = "mssql.employee"
_auto = False name = fields.Char(readonly=True)
employee_no = fields.Char(readonly=True) @api.model_cr
def init(self):
tools.sql.drop_view_if_exists(self.env.cr, self._table)
query = """
create view %s as
SELECT A.id, A.login as name, B.street as employee_no
FROM res_users A
left join res_partner B
on A.Id = B.user_id
""" % self._table
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类的情况一样。

  <!--view list for mssqlemployee-->
<record id="mssql_employee_view_tree" model="ir.ui.view">
<field name="name">mssql_employee_view_tree</field>
<field name="model">mssql.employee</field>
<field name="arch" type="xml">
<tree>
<field name="name"/>
<field name="employee_no"/>
</tree>
</field>
</record> <record id="mssql_employee_view_form" model="ir.ui.view">
<field name="name">mssql_employee_view_form</field>
<field name="model">mssql.employee</field>
<field name="arch" type="xml">
<form>
<sheet>
<group>
<group>
<field name="name"/>
<field name="employee_no"/>
</group>
</group>
</sheet>
</form>
</field>
</record> <record id="mssql_employee_view_search" model="ir.ui.view">
<field name="name">mssql_employee_view_search</field>
<field name="model">mssql.employee</field>
<field name="arch" type="xml">
<search string="Search">
<field name="name" filter_domain="[('name', 'ilike', self)]"/>
</search>
</field>
</record> <record id="mssql_employee_action" model="ir.actions.act_window">
<field name="name">mssql_employee_action</field>
<field name="res_model">mssql.employee</field>
<field name="view_mode">tree,form</field>
<field name="search_view_id" ref="mssql_employee_view_search"/>
<field name="help" type="html">
<p class="oe_view_nocontent_create">
Click to create a mssql employee.
</p>
</field>
</record> <menuitem name="View Mssql Employee" parent="wechat_news" id="mssql_employee_menu" action="mssql_employee_action" sequence=""/>

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

运行时的list效果

 list列表下的筛选效果

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

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

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

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

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

    C#生成sql视图的实体类 using System;using System.Text;using CodeSmith.Engine;using SchemaExplorer;using Syste ...

  2. SQL VIEW(视图)

    1,视图包含行和列,就像一个真实的表. 2,视图中的字段就是来自一个或多个数据库中的真实的表中的字段. 3,我们可以向视图添加 SQL 函数.WHERE 以及 JOIN 语句,我们也可以提交数据,就像 ...

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

    除了QSqlQuery,Qt提供了3个高级类用于访问数据库.这些类是QSqlQueryModel.QSqlTableModel和QSqlRelationalTableModel. 这些类是由QAbst ...

  4. SQL VIEW(视图)

    视图是可视化的表. SQL CREATE VIEW 语句 什么是视图? 在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表. 视图包含行和列,就像一个真实的表.视图中的字段就是来自一个或多个 ...

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

    ylbtech-SQL-W3School-高级:SQL VIEW(视图) 1.返回顶部 1. 视图是可视化的表. 本章讲解如何创建.更新和删除视图. SQL CREATE VIEW 语句 什么是视图? ...

  6. 第15.23节 PyQt(Python+Qt)入门学习:Model/View架构中QListView视图配套Model的开发使用

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.概述 QListView理论上可以和所有QAbstractItemModel派生的类如QStri ...

  7. MVC(Model(模型) View(视图) Controller(控制器))

    复习 1.      商品表 增删改查 index.php  add.php   view.php   edit.php   action.php 2.      MVC(Model(模型)  Vie ...

  8. EF5+MVC4系列(7) 后台SelectListItem传值给前台显示Select下拉框;后台Action接收浏览器传值的4种方式; 后台Action向前台View视图传递数据的四种方式(ViewDate,TempDate,ViewBag,Model (实际是ViewDate.Model传值))

    一:后台使用SelectListItem 传值给前台显示Select下拉框 我们先来看数据库的订单表,里面有3条订单,他们的用户id对应了 UserInfo用户表的数据,现在我们要做的是添加一个Ord ...

  9. (转)Qt Model/View 学习笔记 (三)——Model类

    Model类 基本概念 在model/view构架中,model为view和delegates使用数据提供了标准接口.在Qt中,标准接口QAbstractItemModel类中被定义.不管数据在底层以 ...

随机推荐

  1. 运行 python *.py 文件出错,如:python a.py

    运行 python *.py 文件出错,如:python a.py(下图) 原因:没有安装web.py 解决:下载并安装 网址:http://webpy.org/install#install  (h ...

  2. Java的关键字

    下面列出Java关键字.这些保留字不能用于常量.变量和任标识示字符的名称 没事儿时多背背,对你没有坏处哒! 类别 关键字 说明 访问控制 private 私有的 protected 受保护的 publ ...

  3. 利用顶点位移进行VR畸变校正

    VR开发的最大挑战之一是对高帧率与高分辨率结合的要求.我们通过把顶点转化为“镜头空间”,删除了需要全屏渲染的纹理,这样就可以大规模提高手机性能. 下面的技术使用谷歌的Cardboard Unity S ...

  4. git 入门教程之 git 私服搭建教程

    git 私服搭建教程 前几节我们的远程仓库使用的是 github 网站,托管项目大多是公开的,如果不想让任何人都能看到就需要收费,而且 github 网站毕竟在国外,访问速度太慢,基于上述两点原因,我 ...

  5. centos7安装jdk环境

    有时候安装一些软件或者服务都需要jdk环境,今天就在centos上安装最新的jdk环境. 检测历时安装 1.查看Linux自带的JDK是否已安装 # java -version 2.查看JDK信息 # ...

  6. [转] Scala Try 与错误处理

    一.概述 当你在尝试一门新的语言时,可能不会过于关注程序出错的问题, 但当真的去创造可用的代码时,就不能再忽视代码中的可能产生的错误和异常了. 鉴于各种各样的原因,人们往往低估了语言对错误处理支持程度 ...

  7. mssql sqlserver避免sql脚本中出现除零错误的方法分享

    摘自:http://www.maomao365.com/?p=6612 摘要:下文介绍sql server中,sql脚本避免出现除零错误的方法分享 在各种业务系统开发中,通常会遇到除零的错误,下文分享 ...

  8. SQL SERVER 查看占用tempDB

    use tempdb go t1.session_id, t1.internal_objects_alloc_page_count, t1.user_objects_alloc_page_count, ...

  9. Django基础笔记

    1.准备工作 .虚拟环境设置 python3 pip install virtualenv python -m venv env(虚拟环境文件名) env\Scripts\activate pip i ...

  10. IPerf——网络测试工具介绍与源码解析(3)

    [线程的生成]   生成线程时需要传入一个thread_Settings类型的变量,thread_Settings包含所有线程运行时需要的信息,命令行选项参数解析后所有得到的属性都存储到该类型的变量中 ...