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