Odoo search 搜索视图详解与搜索视图工作原理

本文详细介绍了Odoo搜索视图的工作原理,包括field标签、filter过滤器、separator分割线、group分组布局的用法。重点讨论了filter的domain属性和action的domain字段在设置搜索条件中的作用,以及搜索条件如何影响模型记录的检索。同时,解释了Odoo模型中read_group方法在搜索过程中的角色,以及如何自定义记录筛选逻辑。
摘要由CSDN通过智能技术生成

Odoo search 搜索视图详解与搜索视图工作原理

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

 

搜索视图

    搜索视图的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有最高优先级

 

 

  • 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值来启用的】

context">{'search_default_过滤器name': True}

  • 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。

可以是python语言本身的一些库函数调用的运算表达式)]))]"/>

    2)通过action的domain字段:action中的domain表达式,会在跳转时自动应用

[(表达式)]

 

  搜索条件的工作原理:

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

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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值