基本搜索
默认情况下,搜索框只有一个搜索对象的name字段的功能。
如果想要搜索其他字段,就需要在filter中自行选择要搜索的字段和需要的操作符,进行过滤搜索。
可供选择的操作符包括如下几种:
- 包含
- 不包含
- 等于
- 不等于
- 已设置
- 未设置
这样基本可以满足用户的需求。
Filter
顾名思义,Filter就是过滤,具体的定义规则就是在XML文件中定义一个search视图:
<record id="hostel_room_view_search" model="ir.ui.view">
<field name="model">hostel.room</field>
<field name="arch" type="xml">
<search>
<field name="name"/>
<field name="room_no"/>
<field name="state"/>
<searchpanel>
<field name="state" expand="1" select="multi" icon="fa-check-square-o" enable_counters="1"/>
</searchpanel>
</search>
</field>
</record>
search结点中的三种标签:
-
field: 按字段搜索,即你输入值以后,下拉进行筛选
-
filter: 按照预定的domain进行过滤
-
group: 根据字段进行分组
计算字段的搜索
在Odoo中还有一类字段,是不存储在数据库中的,而是通过计算的方式在需要显示的时候计算出来的值。这类字段通常会使用compute属性,compute对应的是一个方法,这个方法在字段被显示和调用时调用。
沿用以前的模块,我们给型添加一个属性,该属性是由计算出来的:
related_hostel_room = fields.Integer(compute='_compute_related_hostel_room')
def _compute_related_hostel_room(self):
for record in self:
record.related_hostel_room = self.env['hostel.room'].search_count([
('hostel_room_category_id', '=', record.id),
])