Odoo的搜索视图(search view)是用来定义列表视图和看板视图的搜索面板。搜索视图允许用户通过预定义的过滤器和分组对记录进行筛选和分组,从而快速定位到他们需要的数据。搜索视图的定义通常在XML文件中以标签的形式出现。
以下是搜索视图的一些主要元素:
- 过滤器(Filters) - 允许用户根据指定的条件筛选记录。
- 分组(Group by) - 允许用户根据某个字段对记录进行分组。
- 收藏(Favorites) - 用户可以保存特定的搜索条件,以便日后使用。
- 字段(Field) - 用于搜索的字段,可以是关系字段、字符字段等。
搜索视图的XML结构如下:
<search string="搜索视图标题">
<field name="字段名称" string="字段标签" filter_domain="[过滤表达式]" />
<filter string="过滤器名称" name="过滤器标识" domain="[过滤表达式]" />
<filter string="分组名称" name="分组标识" context="{'group_by': '字段名称'}"/>
<separator />
...
</search>
修改过滤器和分组
在定制搜索视图时,你可能想要添加或修改过滤器和分组。这可以通过在标签中添加标签来实现。 标签的属性string定义了在UI上显示的过滤器名称,domain定义了过滤器的筛选逻辑,而context则用于定义分组逻辑。
<search string="合作伙伴搜索">
<field name="name" string="伙伴名称" />
<field name="city" />
<field name="country_id" string="国家" />
<filter string="今天" name="today_filter" domain="[('date','=','today')]" />
<filter string="本月" name="month_filter" domain="[('date','>=','month_start'),('date','<=','month_end')]" />
<group string="按国家分组" name="group_by_country" context="{'group_by':'country_id'}"/>
</search>
在这个例子中,我们为合作伙伴模型定义了一个搜索视图,包括按“伙伴名称”、“城市”、“国家”搜索的字段。通过两个过滤器,“今天”用于筛选今天的记录,而“本月”用于筛选本月的记录。此外,我们还定义了一个“按国家分组”的分组选项。
用户在界面上可以通过选择“今天”或“本月”过滤器来筛选记录,或者通过选择“按国家分组”来查看按国家归类的合作伙伴。
如果您想要隐藏已有的筛选(过滤器),可以通过继承现有的搜索视图并使用invisible="1"属性来实现。这通常通过创建一个新的XML文件并使用和标签来定制已有的视图。您将需要使用xpath表达式来定位您想要修改的过滤器元素,并对其进行适当的修改。
以下是一个例子,演示如何隐藏一个已有的筛选器:
<odoo>
<data>
<!-- 继承现有的搜索视图 -->
<record id="原有视图的外部ID" model="ir.ui.view">
<field name="name">view.model.search.inherit</field> <!-- 设置新视图的名称 -->
<field name="inherit_id" ref="原有视图的外部ID"/> <!-- 指定继承的视图ID -->
<field name="arch" type="xml">
<!-- 使用xpath定位并隐藏过滤器 -->
<filter string="要隐藏的过滤器名称" position="attributes">
<attribute name="invisible">1</attribute>
</filter>
</field>
</record>
</data>
</odoo>
在这个XML代码中:
<record>
标签定义了一个新的视图记录,这个记录将会继承并修改现有的视图。<field name="inherit_id" ref="原有视图的外部ID"/>
指定了我们想要继承的原有视图的外部ID。<field name="arch" type="xml">
包含了对原有视图结构的修改。- xpath表达式
<filter string="要隐藏的过滤器名称" position="attributes">
用来定位我们想要隐藏的过滤器。 <attribute name="invisible">1</attribute>
是设置过滤器为不可见的实际操作。
请注意,要隐藏的过滤器名称应该是过滤器在原有视图中的string属性值或者是它的name属性值(取决于哪个被用来在原有视图中唯一地识别过滤器)。您还需要确保您使用的是正确的XML ID来引用现有的视图和字段。在上述代码中,原有视图的外部ID应替换为您想要修改的搜索视图的实际XML ID。
假如原有视图中存在一个过滤器ID是“partner_active_filter”,并且您想要隐藏它,您应该在ref属性中使用它的外部ID,像这样:
<filter name="partner_active_filter" position="attributes">
<attribute name="invisible">1</attribute>
</filter>
这样做之后,当用户访问相应的模型视图时,该过滤器不会显示在搜索面板上。