zoukankan      html  css  js  c++  java
  • odoo10 关于ODOOsearch视图

    前言:

    关于search视图,存在三个知识点,就是:
    1. 搜索

    2. 过滤

    3. 分组

    4. 定义个性化的搜索

    1. 搜索

    指的就是,在搜索框,根据用户需求,指定搜索实现代码实现了的搜索功能,比如:按部门搜索,按资产名称搜索等等....

    实现方法:

    <record id="view_kthrp_asset_maintenance_wo_search" model="ir.ui.view">
        <field name="name">kthrp.asset.maintenance.work.order.search</field>
        <field name="model">kthrp.asset.maintenance.work.order</field>
        <field name="arch" type="xml">
            <search>
                <field name="wo_overview" string="Work Order"
    filter_domain="['|',('doc_number','ilike',self),('wo_overview','ilike',self)]"/>
                <field name="asset_id" string="Asset" filter_domain="['|','|','|',('asset_id.name','ilike',self),('asset_id.code','ilike',self),('object_list_ids.asset_id.name','ilike',self),('object_list_ids.asset_id.code','ilike',self)]"/>
                <field name="engineer_id" string="Engineer" filter_domain="['|',('engineer_id.employee_id.name','ilike',self),('engineer_id.employee_id.number','ilike',self)]"/>
                <field name="use_department_id" string="Use Dept."
    filter_domain="['|',
    ('use_department_id.code', 'ilike', self), '|',
    ('use_department_id.organization', 'ilike', self),
    ('use_department_id.pinyin_code', 'ilike', self)]"/>
            </search>
        </field>
    </record>

    在search标签内部,就是实现搜索的xml代码,可以看出,代码是通过工作单号,资产名称、编码,工程师,使用部门进行的搜索。

    现在我们来细说代码的实现,首先record是一个创建了一个ir.ui.view模型的记录,name为kthrp.asset.maintenance.work.order.search,模型为kthrp.asset.maintenance.work.order,

    search标签中,name是一个属性,作用其实不大,string表示展示时的名字,(当用户输入自己想要搜索的名词时,就会提示,按string搜索)

    filter_domain跟的是搜索时的数据限制,如果是模糊搜索就用'ilike',完全匹配搜索就用'like', self表示当前输入的内容。

    万物皆对象,对什么字段进行限制,都是从model中的存在的字段进行筛选的,通过对象点属性的方式,就能准确定位到我们需要定位的字段属性了。

    2. 过滤

    <record id="view_kthrp_asset_maintenance_wo_search" model="ir.ui.view">
        <field name="name">kthrp.asset.maintenance.work.order.search</field>
        <field name="model">kthrp.asset.maintenance.work.order</field>
        <field name="arch" type="xml">
            <search>
                <filter string="Created" name="created" domain="[('state','=','created')]"/>
                <filter string="Processing" name="processing" domain="[('state','=','processing')]"/>
                <filter string="Assigned" name="assigned" domain="[('state','=','assigned')]"/>
                <filter string="Completed" name="completed" domain="[('state','=','completed')]"/>
                <filter string="Urgent" name="urgency_id" domain="[('priority_id','=','urgent'),('type_classification','in',('repair','preventive'))]"/>
            </search>
        </field>
    </record>  

    过滤就是输入框下方的小按钮,点击会成为下拉选择,选择需要的状况进行数据的过滤

    代码中string表示过滤信息的展示,name辅助属性,domain就是数据的限制实现,根据model中存在的字段,进行数据的限制

    3. 分组

    <record id="view_kthrp_asset_maintenance_wo_search" model="ir.ui.view">
        <field name="name">kthrp.asset.maintenance.work.order.search</field>
        <field name="model">kthrp.asset.maintenance.work.order</field>
        <field name="arch" type="xml">
            <search>
                <group string="Group By">
                    <filter string="State" name="state" domain="[]" context="{'group_by':'state'}"/>
                    <filter string="WO Type" name="type_id" domain="[]" context="{'group_by':'type_id'}"/>
                    <filter string="Use Dept." name="use_department_id"
    domain="[]"
    context="{'group_by':'use_department_id'}"/>
                </group>
            </search>
        </field>
    </record>

    分组是需要用group标签包括在里面才能生效,写法也都是固定的方式,只要写上你需要分组的字段,就可以了相对来说会比搜索和过滤简单 一些。

     

    有一个特别的情况,odoo12的默认分组什么的,代码类似于这样:

     搜索字段和分组的字段,name字段不能相同,否则会报错,还不好找错

  • 相关阅读:
    [iOS基础控件
    [iOS基础控件
    [iOS基础控件
    [iOS基础控件
    [iOS基础控件
    [iOS基础控件
    [iOS基础控件
    白话之jsonp跨域原理分析
    crontab定时任务
    python模块之uuid
  • 原文地址:https://www.cnblogs.com/pywjh/p/12238121.html
Copyright © 2011-2022 走看看