odoo多字段与拼音简写搜索

最近在给客户提到之前的老系统曾经有个很好的功能,就是可以通过客户的名称拼音简写快速搜索到客户资料,问我Odoo可不可以也实现类似的功能,答案当然是可以了,本文就来介绍一下该模块的大体思路.

多字段搜索

首先,我们要知道的一个基础就是Many2one字段的下拉框的工作原理.这里我们简单复述一下(具体内容,读者可以去白皮书查看详细介绍), 我们在点击Many2one字段的时候,首先触发onchange事件,然后将关键字传递给name_search方法, name_search方法在后台匹配到符合条件的结果以后,会调用name_get方法将结果加工成可以在列表中显示出来的格式返回给前端,也就是我们最后看到的样子.

name_search方法最大的问题是只能支持name字段搜索,就拿合作伙伴这个模型来说,你说我想根据地址进行搜索,对不起,不支持.那怎么办呢,这个时候就轮到我们今天的1号模块出场了.

name_searh_options模块是笔者开发的一个专门用来解决这个问题的模块,接下来我们来看一下这个模块是如何工作的.

安装了本模块以后,字段属性里就支持使用name_search属性来指定除了name以外需要额外进行搜索的字段.还是上面的例子, 假如我现在客户的下拉列表中根据省市区来进行搜索, 那么我们的字段就可以这么定义:

1
<field name="partner_id" name_search="state_id,city" />

根据拼音简拼进行搜索

有了name_search_options模块,那么再处理简拼问题就显得简单多了, 笔者这里同样新写了一个模块: mommy_partner_pinyin

首先,我们使用开源库pypinyin来处理汉字转拼音的问题, 这里我们使用了一个后台定时任务针对客户名称批量进行翻译,然后将翻译后的结果放到pinyin_short字段里.

这样,再搭配name_search_options模块, 就可以写成下面的形式:

1
<field name="partner_id" name_search="pinyin_short"/>

最终的效果图:

你的支持我的动力