本文實際上是對 _name_search 方法的應用。本文以在Many2one圖書借閱人字段上,輸入借閱人姓名或借閱人手機號碼來搜索借閱人舉例說明使用方法。
假如我們有這樣的需求:有讀者(默認讀者信息已存在數據庫中)前來借閱,圖書管理員需要登記借閱信息,在登記信息,選擇借閱人時,管理員希望既能通過借閱人姓名,還能通過借閱人手機號,快速檢索到借閱人。畢竟現在的人給孩子取名都挺撈的,張梓曦,張梓兮,張梓汐,張子兮,張子汐,王浩辰,王浩宸,王皓宸,王皓辰。管理員表示:我特麼心態崩了,我特麼裂開了,我特麼知道哪個是你?趕緊給我整個手機號搜索吧。
行,那咱就重寫_name_search 方法吧。
class ResPartner(models.Model):
_inherit = 'res.partner'
name = fields.Char(string="Name")
phone = fields.Char(string="Phone")
@api.model
def _name_search(self, name='', args=None, operator='ilike', limit=100, name_get_uid=None):
if args is None:
args = []
domain = args + ["|",('phone', operator, name),('name', operator, name)]
ids = self._search(domain, limit=limit, access_rights_uid=name_get_uid)
return models.lazy_name_get(self.browse(ids).with_user(name_get_uid))
倒數第二行,爲domain 增加手機號篩選即可
文中上述方法,適合在Many2one的字段控件上,進行多條件搜索,搜索視圖中的多條件搜索請請移步 ODOO 域(條件)表達式 domain、force_domain及filter_domain 的應用場景及應用方式