转载请注明原文地址:http://www.javashuo.com/article/p-mwuqogxu-ch.htmlhtml
field标签订义了用于搜索过滤的字段有哪些。python
searchview中的field字段只是说明了能够用哪些字段来做过滤,而且在搜索框输入时会自动启用搜索字段的模糊搜索功能以供候选。sql
可有如下几种属性,进一步指定使用某些字段的某些过滤条件进行记录筛选:dom
<field name="name" filter_domain="['|', '|', ('明确的字段内容', 'ilike', self), ('shortdesc', 'ilike', self), ('name', 'ilike', self)]" string="Theme"/>
过滤器,比filed字段更具体。searchview中的field字段只是说明了能够用哪些字段来做过滤,而且在搜索框输入时会自动启用搜索字段的模糊搜索功能以供候选;而filter则更加具体,它的domain属性或context属性,指明了具体的字段值过滤条件,符合条件的记录才会做为最终搜索结果显示出来。ide
filter中的context,是dict类型。
a)传递分组依据:
context="{'group_by':'字段'}"
b)为domain表达式传递变量值
context="{'key':value}"
<record id="action_hr_timesheet_attendance_report" model="ir.actions.act_window"> <field name="context">{'search_default_过滤器name': True}</field> </record>
分割线。用于将过滤器按组分开,更好看。函数
分局布局,用于过滤器比较多的状况下,分组排放。布局
搜索字段和过滤条件能够经过action的context使用search_default_name 配置,对于字段就是须要搜索的值,对过滤器它是一个布尔值:ui
{ 'search_default_foo': 'acro', 'search_default_bar': 1 } #自动激活bar过滤器,并在foo字段搜索acro
1)经过filter的domain属性。表达式的值:spa
a)能够是具体的明确值;插件
b)能够是python运算表达式(不过不能取具体记录字段值,能够是python语言自己的一些库函数调用的运算表达式)。
c)能够是一个变量名,变量值则经过context来赋予。通常用于制定默认搜索条件,在context中传递key:value。
<filter name="" string="" domain="[('字段', '比较运算符', 值[值能够是具体的明确值;也能够是python运算表达式(不过不能取具体记录字段值,能够是python语言自己的一些库函数调用的运算表达式)]))]"/>
2)经过action的domain字段:action中的domain表达式,会在跳转时自动应用
<record id="action_" model="ir.actions.act_window"> <field name="name"></field> <field name="res_model"></field> <field name="domain">[(表达式)]</field> </record>
odoo模型中有个方法:read_group(self, domain, fields, groupby, offset=0, limit=None, orderby=False, lazy=True)
该方法用于读取搜索视图上的过滤条件,并使用过滤条件搜索模型记录。
其中,domain是一个list,里面是一个个的表达式,由 action中的domain+fiter中的domain+界面上临时应用的筛选条件 拼接而成。
工做流程为:
action打开tree视图——调用模型的read_group()函数,根据domain条件,调用模型的search(domain)进行检索——把记录集返回界面上呈现;
每当界面上点击了 筛选——过滤器 或 筛选——自定义筛选 ,都会调用一次read_group()函数,从新拼接domain列表,并检索模型数据。【多维分析中也是该逻辑,不过是从sql查询出来的view做为数据源,从中筛选数据】
【能够重写模型的该方法,自定义记录的筛选逻辑。】