在做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视图

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

最新文章

  1. QQ传输协议分析
  2. mysql 允许远程访问
  3. Filestream/Windows Share导致Alwayson Failover失败
  4. php中提示Undefined index的解决方法
  5. 关于Thread.getContextClassLoader的使用场景问题
  6. jekyll : 使用github托管你的博客
  7. java url中文 编译和解码
  8. stat(),lstat(),fstat() 获取文件/目录的相关信息
  9. 提交App,请求Apple加急审核
  10. iOS 开发的几种手势
  11. API访问客户端
  12. 佛祖镇楼,BUG避易
  13. 华为oj之字符串反转
  14. 2019/4/15 wen 正则表达式
  15. (10)Microsoft office Word 2013版本操作入门_word表格
  16. 理解SSL、HTTPS原理中的对称加密与非对称加密
  17. Codeforces.914D.Bash and a Tough Math Puzzle(线段树)
  18. Excel技巧--漏斗图让转化率直观明了
  19. jQuery基础(DOM篇,append(),after(),prepend(),insertAfter(),节点删除,遍历方法each())
  20. ++i? i++? i+=1? i=i+1? 何必纠结?

热门文章

  1. 【Apache运维基础(6)】Apache的日志管理与分析
  2. openstack nova工作流程
  3. SQLServer2016 AlwaysOn AG基于工作组的搭建笔记
  4. ASP.NET MVC之从控制器传递数据到视图方式
  5. Python:decorator [转]
  6. Linux补充
  7. 联想x3650m5服务器安装windows2008R2系统
  8. centos7如何安装gcc5.4
  9. Ecto 总结
  10. js FormData方法介绍