在做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. Java判断一个字符是否是数字的几种方法的代码

    在工作期间,将写内容过程经常用到的一些内容段做个记录,下面内容是关于Java判断一个字符是否是数字的几种方法的内容,希望能对码农们有好处. public class Test{ public stat ...

  2. ArrayMap 和HashMap的区别

    在以往android开发中,我们常常用key-value存储数据时,随手就会打出HashMap的代码,当数据量较小时,这种方法还不错还可以,当数据量比较多的时候,如果是PC机上,也还阔以.但是如果使用 ...

  3. ionic提示弹框

    //提示框 .factory('TipsPort', function ($ionicPopup) { var TipsPort = function (tipsText, SureFunction, ...

  4. Gson解析空字符串异常的处理

    面对一些不规范的json,我们的gson解析经常会抛出各种异常导致app崩溃,这里可以采取一些措施来避免. 我们期望在后台返回的json异常时,也能解析成功,空值对应的转换为默认值,如:newsId= ...

  5. 关于最新笔记本机型预装win8如何更换为win7的解决办法

    关于最新笔记本机型预装win8如何更换为win7的解决办法 目前新出的很多机型出厂自带的都是win8系统,可能有些人用不习惯,想更换为win7系统,但是由于这些机型主板都采用UEFI这种接口(硬盘分区 ...

  6. Linux如何查看YUM的安装目录

    Linux下如何查看使用YUM安装过的包的安装路径呢? 在搞清楚这个问题前,我们先来了解一下YUM. YUM(全称为 Yellow dog Updater, Modified)是一个在Fedora和R ...

  7. java调用天气预报接口案例

    免费天气接口:http://mobile.weather.com.cn/data/sk/城市ID.html 例如: http://mobile.weather.com.cn/data/sk/10124 ...

  8. 转:修改IIS虚拟目录名称bat脚本

    @echo off echo ------------------------------------------------------------------------------ echo - ...

  9. Zabbix Agent安装与卸载

    cmd /c "C:\zabbix\bin\win64\zabbix_agentd.exe -c c:\zabbix\conf\zabbix_agentd.win.conf -i" ...

  10. 本博客停止更新改用wordperss

    http://www.azurew.com/ 还是能有自己的博客比较爽 哈哈哈