odoo 基于SQL View视图的model类
在做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类的更多相关文章
- CodeSmith生成SQL Server视图的实体类脚本/对应的生成模板
C#生成sql视图的实体类 using System;using System.Text;using CodeSmith.Engine;using SchemaExplorer;using Syste ...
- SQL VIEW(视图)
1,视图包含行和列,就像一个真实的表. 2,视图中的字段就是来自一个或多个数据库中的真实的表中的字段. 3,我们可以向视图添加 SQL 函数.WHERE 以及 JOIN 语句,我们也可以提交数据,就像 ...
- QtSQL学习笔记(4)- 使用SQL Model类
除了QSqlQuery,Qt提供了3个高级类用于访问数据库.这些类是QSqlQueryModel.QSqlTableModel和QSqlRelationalTableModel. 这些类是由QAbst ...
- SQL VIEW(视图)
视图是可视化的表. SQL CREATE VIEW 语句 什么是视图? 在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表. 视图包含行和列,就像一个真实的表.视图中的字段就是来自一个或多个 ...
- SQL-W3School-高级:SQL VIEW(视图)
ylbtech-SQL-W3School-高级:SQL VIEW(视图) 1.返回顶部 1. 视图是可视化的表. 本章讲解如何创建.更新和删除视图. SQL CREATE VIEW 语句 什么是视图? ...
- 第15.23节 PyQt(Python+Qt)入门学习:Model/View架构中QListView视图配套Model的开发使用
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.概述 QListView理论上可以和所有QAbstractItemModel派生的类如QStri ...
- MVC(Model(模型) View(视图) Controller(控制器))
复习 1. 商品表 增删改查 index.php add.php view.php edit.php action.php 2. MVC(Model(模型) Vie ...
- EF5+MVC4系列(7) 后台SelectListItem传值给前台显示Select下拉框;后台Action接收浏览器传值的4种方式; 后台Action向前台View视图传递数据的四种方式(ViewDate,TempDate,ViewBag,Model (实际是ViewDate.Model传值))
一:后台使用SelectListItem 传值给前台显示Select下拉框 我们先来看数据库的订单表,里面有3条订单,他们的用户id对应了 UserInfo用户表的数据,现在我们要做的是添加一个Ord ...
- (转)Qt Model/View 学习笔记 (三)——Model类
Model类 基本概念 在model/view构架中,model为view和delegates使用数据提供了标准接口.在Qt中,标准接口QAbstractItemModel类中被定义.不管数据在底层以 ...
随机推荐
- C# 使用System.Data.OleDb;避免oracle中文乱码问题
首先,需要保证oracle客户端服务器的字符集是一样的,并且保证该字符集支持中文.你可以使用plsql查看是否乱码. 代码: using System; using System.Collection ...
- 2014年11月17~11月18日,杨学明老师《企业IT需求收集和实施》内训在湖南长沙某酒店成功举办!
2014年11月17至18日,受湖南某软件企业的邀请,杨学明老师<企业IT需求收集和实施>内训在某长沙某五星级酒店成功举办!来自全国各地的IT高管和企业负责人参加了此次培训.杨学明老师分别 ...
- 2019年Web前端最新导航(常见前端框架、前端大牛)
本文最初发表于博客园,并在GitHub上持续更新前端的系列文章.欢迎在GitHub上关注我,一起入门和进阶前端. 前言 本文列出了很多与前端有关的常见网站.博客.工具等,整体来看比较权威.有些东西已经 ...
- Python - 判断list是否为空
Python中判断list是否为空有以下两种方式: 方式一: list_temp = [] if len(list_temp): # 存在值即为真 else: # list_temp是空的 方式二: ...
- LeetCode算法题-Valid Palindrome(Java实现)
这是悦乐书的第174次更新,第176篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第33题(顺位题号是125).给定一个字符串,确定它是否是回文,只考虑字母数字字符并忽略 ...
- 【2018.04.27 C与C++基础】关于switch-case及if-else的效率问题
对于这个问题自己是比较清楚的,在分支比较多时,switch-case的效率肯定比if-else的要高许多,其原理类似于我们在优化某些程序时使用查表来代替算法计算一样. 如果想进一步深究的话,可以查看G ...
- FCM算法的matlab程序(初步)
FCM算法的matlab程序 在https://www.cnblogs.com/kailugaji/p/9648430.html文章中已经介绍了FCM算法,现在用matlab程序实现它. 作者:凯鲁嘎 ...
- MVC+EF 序列化类型为“System.Data.Entity.DynamicProxies.__的对象时检测到循环引用
用MVC+EF做简单查询时,返回json格式数据出现问题 原代码: public ActionResult JSon({ NorthwindEntities db = new NorthwindEnt ...
- 团队作业——Alpha冲刺
团队作业--Alpha冲刺 时间安排及内容要求 时间 内容 11.1-11.16 12次 Scrum 11.16-11.20 测试报告 与 用户反馈 11.21-11.24 展示博客 11.25 课堂 ...
- Gulp的简单使用
我比较喜欢使用Gulp,因为简单好用! 今天的任务是:使用Gulp来压缩 jQuery源码,各输出一个压缩的和未压缩的版本 第一步:安装 cnpm install gulp --save-dev cn ...