zoukankan      html  css  js  c++  java
  • 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视图

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

  • 相关阅读:
    Java MVC和三层架构
    EL表达式
    EL表达式中的11个隐式对象
    JDBC连接数据库7个步骤
    JSP九大内置对象和四个作用域
    Eclipse常用快捷键大全
    Java的绝对路径和相对路径
    Servlet中相对路径与绝对路径
    mysql8的深坑
    mysql单列索引和联合索引
  • 原文地址:https://www.cnblogs.com/crazyguo/p/9682939.html
Copyright © 2011-2022 走看看