odoo 中實現多列搜索

odoo 中不少many2one字段不少都有需求要顯示 name+description的。
python

類:api

class vp_project(models.Model):
    _name='vp.project'
    _inherit = ['mail.thread', 'ir.needaction_mixin']
    _discription='VP project'
    
    
    name=fields.Char('VP NO.',  required=True,select=True, copy=False)
    applicant= fields.Char('Contact')
    description= fields.Text('Description')
    project_name=fields.Char('Project Name', select=True, copy=False)
    customer = fields.Many2one('res.partner','Customer',required=True, domain=[('customer', '=', True)])


另外一個類中有一個字段many2one app

vp_project = fields.Many2one('vp.project', string='VP Project',  states=READONLY_STATES, required=True, track_visibility='always')


在視圖中當對字段vp_project進行下拉選擇的時候通常時候只會顯示name。 即 vp.project 裏面的namedom

有些需求就是要下拉選擇的時候能看的project_name. 由於這個vp number只是一個編號不能肯定是否是所選的。ui

要想實現這個功能就要在類 vp_project 裏面添加方法code

  @api.multi
    @api.depends('name', 'project_name')
    def name_get(self):
        return [(r.id, (r.name +'(' + (r.project_name or _('Default'))+')' )) for r in self]

 下拉選擇效果, 就會把project_name 字段也會顯示出來ip

  

要實現輸入project name 能搜索到想要的字段只有這樣還不能夠。 好比如今輸入SW 第一個project不會被過濾出來。 get

要想實現多列搜索 得在類中再添加一個方法:string

  @api.model
    def name_search(self, name='', args=None, operator='ilike', limit=100):
        args = args or []
        domain = []
        if name:
            domain = ['|', ('name', operator, name), ('project_name', operator, name)]
        pos = self.search(domain + args, limit=limit)
        return pos.name_get()

這樣輸入project name 就能夠把搜索到想要的記錄了it

相關文章
相關標籤/搜索