转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/10826430.html

搜索视图

搜索视图的search标签本身没什么属性可以使用,只要是<search></search>标签之间的内容定义了搜索动作。

1:field

field标签定义了用于搜索过滤的字段有哪些。

searchview中的field字段只是说明了可以用哪些字段来作过滤,并且在搜索框输入时会自动启用搜索字段的模糊搜索功能以供候选

可有以下几种属性,进一步指定使用某些字段的某些过滤条件进行记录筛选

  • name -- 作为过滤条件的字段名
  • string -- 字段的label
  • operator -- 默认情况下field会生成[(name, operator, provided_value)]格式的表达式,其中name是字段名,provided_value是用户提供的值,operator属性可被重写默认的运算符(默认情况下是根据字段类型分配,数字型是=,字符型是ilike)
  • filter_domain -- 用于搜索的完整的domain表达式,可以用self变量来代表当前记录的当前字段值,当operator和filter_domain同时赋值时,filter_domain有最高优先级
<field name="name" filter_domain="['|', '|', ('明确的字段内容', 'ilike', self), ('shortdesc', 'ilike', self), ('name', 'ilike', self)]" string="Theme"/>
  • context -- 上下文的值。【具体用法:待研究】
  • groups -- 使该字段只对某些用户组可用。
  • widget -- 使用指定的搜索部件(唯一的用例是V8的many2one字段选择插件
  • domain -- 如果用于搜索的字段是 关联字段,使用domain来过滤候选的搜索选项

2:filter

过滤器,比filed字段更具体。searchview中的field字段只是说明了可以用哪些字段来作过滤,并且在搜索框输入时会自动启用搜索字段的模糊搜索功能以供候选;而filter则更加具体,它的domain属性或context属性,指明了具体的字段值过滤条件,符合条件的记录才会作为最终搜索结果显示出来。

  • string (required) -- 过滤器的label
  • domain -- 一个domain表达式,被添加到action的domain表达式中,作为搜索的domain表达式一部分,作用于最终的记录过滤。
  • context -- 一个python字典对象,被合并到action的domain表达式中,用于传递搜索的domain表达式的值
filter中的context,是dict类型。
a)传递分组依据:
context="{'group_by':'字段'}"
b)为domain表达式传递变量值
context="{'key':value}"
  • name -- 过滤器的逻辑名【在action跳转到搜索视图时,可以在context中指明默认启用哪个filter,就是通过name值来启用的
        <record id="action_hr_timesheet_attendance_report" model="ir.actions.act_window">
<field name="context">{'search_default_过滤器name': True}</field>
</record>
  • help -- 过滤器的描述文字
  • groups -- 指定过滤器可用的用户组。

3:separator

分割线。用于将过滤器按组分开,更好看。

4:group

分局布局,用于过滤器比较多的情况下,分组排放。

5:默认搜索

搜索字段和过滤条件可以通过action的context使用search_default_name 配置,对于字段就是需要搜索的值,对过滤器它是一个布尔值:

{
'search_default_foo': 'acro',
'search_default_bar': 1
}
#自动激活bar过滤器,并在foo字段搜索acro

综上,搜索视图的过滤条件制定有2种方式:

1)通过filter的domain属性。表达式的值:

       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作为数据源,从中筛选数据】

可以重写模型的该方法,自定义记录的筛选逻辑。

Odoo search 搜索视图详解与搜索视图工作原理的更多相关文章

  1. 详解Java GC的工作原理+Minor GC、FullGC

    详解Java GC的工作原理+Minor GC.FullGC 引用地址:http://www.blogjava.net/ldwblog/archive/2013/07/24/401919.html J ...

  2. Lucene系列六:Lucene搜索详解(Lucene搜索流程详解、搜索核心API详解、基本查询详解、QueryParser详解)

    一.搜索流程详解 1. 先看一下Lucene的架构图 由图可知搜索的过程如下: 用户输入搜索的关键字.对关键字进行分词.根据分词结果去索引库里面找到对应的文章id.根据文章id找到对应的文章 2. L ...

  3. UML建模语言入门 -- 用例视图详解 用例视图建模实战

    . 作者 :万境绝尘  转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/18964835 . 一. 用例视图概述 用例视图表述哪些 ...

  4. 【UML 建模】UML建模语言入门 -- 用例视图详解 用例视图建模实战

    . 作者 :万境绝尘  转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/18964835 . 一. 用例视图概述 用例视图表述哪些 ...

  5. 详解Java GC的工作原理

    JVM学习笔记之JVM内存管理和JVM垃圾回收的概念,JVM内存结构由堆.栈.本地方法栈.方法区等部分组成,另外JVM分别对新生代和旧生代采用不同的垃圾回收机制. 首先来看一下JVM内存结构,它是由堆 ...

  6. 详解HashMap的内部工作原理

    本文将用一个简单的例子来解释下HashMap内部的工作原理.首先我们从一个例子开始,而不仅仅是从理论上,这样,有助于更好地理解,然后,我们来看下get和put到底是怎样工作的. 我们来看个非常简单的例 ...

  7. OkHttp3源码详解(六) Okhttp任务队列工作原理

    1 概述 1.1 引言 android完成非阻塞式的异步请求的时候都是通过启动子线程的方式来解决,子线程执行完任务的之后通过handler的方式来和主线程来完成通信.无限制的创建线程,会给系统带来大量 ...

  8. 【elasticsearch】搜索过程详解

    elasticsearch 搜索过程详解 本文基于elasticsearch8.1.在es搜索中,经常会使用索引+星号,采用时间戳来进行搜索,比如aaaa-*在es中是怎么处理这类请求的呢?是对匹配的 ...

  9. Elasticsearch java api 基本搜索部分详解

    文档是结合几个博客整理出来的,内容大部分为转载内容.在使用过程中,对一些疑问点进行了整理与解析. Elasticsearch java api 基本搜索部分详解 ElasticSearch 常用的查询 ...

随机推荐

  1. O(n log n)求最长上升子序列与最长不下降子序列

    考虑dp(i)表示新上升子序列第i位数值的最小值.由于dp数组是单调的,所以对于每一个数,我们可以二分出它在dp数组中的位置,然后更新就可以了,最终的答案就是dp数组中第一个出现正无穷的位置. 代码非 ...

  2. ACE网络编程:IPC SAP、ACE_SOCKET和TCP/IP通信实例

    socket.TLI.STREAM管道和FIFO为访问局部和全局IPC机制提供广泛的接口.但是,有许多问题与这些不统一的接口有关联.比如类型安全的缺乏和多维度的复杂性会导致成问题的和易错的编程.ACE ...

  3. 洛谷P3232[HNOI2013]游走

    有一个无向简单连通图,顶点从 \(1\) 编号到 \(n\),边从 \(1\) 编号到 \(m\) 小Z在该图上进行随机游走,初始时小Z在\(1\)号顶点,每一步小Z以相等的概率随机选 择当前顶点的某 ...

  4. [LeetCode] 343. Integer Break 整数拆分

    Given a positive integer n, break it into the sum of at least two positive integers and maximize the ...

  5. Java非侵入式API接口即文档工具apigcc

    一个非侵入的api编译.收集.Rest文档生成工具.工具通过分析代码和注释,获取文档信息,生成RestDoc文档 前言 程序员一直以来都有一个烦恼,只想写代码,不想写文档.代码就表达了我的思想和灵魂. ...

  6. [Powershell]发布基于.NET Framework的WebAPI和Job控制台程序项目

    获取要发布的定时计划任务. 禁用和停止定时计划任务. 批量强制结束Job进程. 打印定时计划任务状态. 备份项目文件夹. 发布项目文件夹. 删除部署包. 启用定时计划任务. <# .NOTES ...

  7. Adams宏导出

    var set var=ip integer_value=1 var set var=macro_name str="" for variable_name=the_macro o ...

  8. BizTalk增强型RosettaNet跟踪报告

      BizTalk 的数据报表能力一直是比较弱的,好在Rosettanet 支持使用BAM 跟踪功能来跟踪各PIP消息状态.增强的跟踪功能能跟踪流程为消息.错误和事件.不可否认性的数据.可以根据跟踪的 ...

  9. Java连载13-整数型字面值的强制转换

    一.注意点 1.大容量不能直接赋值给小容量:大容量转化为小容量需要进行,强制类型转换,强制类型转换需要加上“强制类型转换符”,加上强制类型转换符之后编译通过了但是精度会有有可能损失.所以强制类型转换要 ...

  10. Java学习清单

    转自: csdn/zuochao_2013/article/details/76795164   ·   Java基础部分 *Java基础才是重中之重,只有基础打牢了,学习各种框架才能游刃有余. 1, ...