odoo10 关于ODOOsearch视图

前言:

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

  2. 过滤

  3. 分组

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

上一篇:自制安卓各种图标设置


下一篇:【flutter】Row和Column组件