要为可编辑列表视图字段搜索添加查询过滤条件,需要进行以下步骤:
- 定义一个搜索视图。
搜索视图是一个 XML 文件,用于定义搜索条件的过滤器和默认值。
示例代码:
<?xml version="1.0" encoding="UTF-8"?>
<search>
<field name="my_field" string="My Field"/>
</search>
在上述代码中,“my_field”是要添加过滤条件的字段名称,“My Field”是在搜索视图中显示的字段名称。
- 将搜索视图添加到模型中。
可以在该模型的 search_view_id
字段中设置搜索视图。
示例代码:
class MyModel(models.Model):
_name = 'my.model'
_description = 'My Model'
my_field = fields.Char()
search_view_id = fields.Many2one(
comodel_name='ir.ui.view', string='Search View',
domain="[('model', '=', _name), ('type', '=', 'search')]",
ondelete='set null')
在上述代码中,search_view_id
是一个对 ir.ui.view
模型的引用。该字段的 domain
参数用于限制可供选择的视图列表,以确保您只添加搜索视图。
- 为搜索视图添加过滤条件。
可以在搜索视图的 filter
标记中添加过滤器。过滤器是一个用于定义要过滤的字段、比较运算符以及要匹配的值的 XML 标记。
示例代码:
<?xml version="1.0" encoding="UTF-8"?>
<search>
<field name="my_field" string="My Field"/>
<filter string="My Field contains 'test'">
<field name="my_field" string="My Field"/>
<value>test</value>
</filter>
</search>
在上述代码中,filter
标记包含要添加的过滤器,它包括一个字符串来描述过滤器以及 field
标记和 value
标记来定义用于过滤的字段和值。
- 将搜索视图与列表视图关联起来。
在列表视图的 search_view_id
属性中,可以指定要使用的搜索视图。
示例代码:
<record id="my_model_list" model="ir.ui.view">
<field name="name">my.model.list</field>
<field name="model">my.model</field>
<field name="arch" type="xml">
<tree>
<field name="my_field"/>
</tree>
</field>
<field name="search_view_id" ref="my_model_search_view"/>
</record>
在上述代码中,search_view_id
属性包含要使用的搜索视图的引用。
- 编辑列表视图字段
点击编辑视图图标,进入“编辑视图”这个页面。编辑关键字为<field>
的标签,这个是视图中控件的表示标记。
示例代码:
<field name="my_field" options="{'searchable': true}"/>
在上述代码中,options
参数中通过 searchable
参数设置当前字段为可搜索。
- 添加数据
在这个模型对象的视图中,添加数据。
- 测试搜索
在列表视图上,会有搜索框,与任何其他搜索框一样,通过搜索框输入任何字符串,在my_field
中包含该字符串的所有记录都将显示。
另一个示例用于搜索 datetime
类型的字段:
- 定义搜索视图
<?xml version="1.0" encoding="UTF-8"?>
<search>
<field name="start_datetime" string="Start Datetime"/>
</search>
在上述代码中,“start_datetime”是要添加过滤条件的字段名,“Start Datetime”是在搜索视图中显示的字段名。
- 将搜索视图添加到模型中
class MyModel(models.Model):
_name = 'my.model'
_description = 'My Model'
start_datetime = fields.Datetime(string='Start Datetime')
search_view_id = fields.Many2one(
comodel_name='ir.ui.view', string='Search View',
domain="[('model', '=', _name), ('type', '=', 'search')]",
ondelete='set null')
在上述代码中,search_view_id
是一个对 ir.ui.view
模型的引用,该字段的 domain
参数用于限制可供选择的视图列表,以确保您只添加搜索视图。
- 为搜索视图添加过滤条件
<?xml version="1.0" encoding="UTF-8"?>
<search>
<field name="start_datetime" string="Start Datetime"/>
<filter name="week" string="This Week">
<field name="start_datetime"/>
<range name="week"/>
</filter>
<filter name="month" string="This Month">
<field name="start_datetime"/>
<range name="month"/>
</filter>
</search>
在上述代码中,range
标记用于指定要匹配的时间范围。
- 将搜索视图与列表视图关联起来
<record id="my_model_list" model="ir.ui.view">
<field name="name">my.model.list</field>
<field name="model">my.model</field>
<field name="arch" type="xml">
<tree>
<field name="start_datetime"/>
</tree>
</field>
<field name="search_view_id" ref="my_model_search_view"/>
</record>
在上述代码中,search_view_id
属性包含要使用的搜索视图的引用。
5.编辑列表视图字段
<field name="start_datetime" type="datetime"
options="{'searchable': True, 'widget': 'date'}"/>
在上述代码中, options
参数是字典,searchable
参数设置当前字段为可搜索,widget
参数设置当前字段的控件为日期选择器。
- 添加数据
在此模型对象的视图中添加数据。
- 测试搜索
在列表视图上,会有搜索框,与任何其他搜索框一样,通过搜索框输入时间范围,在 start_datetime
中包含该时间范围内的所有记录都将显示。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:odoo 为可编辑列表视图字段搜索添加查询过滤条件的详细过程 - Python技术站