odoo 中实现多列搜索
博客专区 > Fly_f 的博客 > 博客详情
odoo 中实现多列搜索
Fly_f 发表于2年前
odoo 中实现多列搜索
  • 发表于 2年前
  • 阅读 82
  • 收藏 1
  • 点赞 1
  • 评论 0

标题:腾讯云 新注册用户域名抢购1元起>>>   

摘要: odoo/openerp 中多列显示和多列搜索

odoo 中很多many2one字段很多都有需求要显示 name+description的。

类:

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 

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


在视图中当对字段vp_project进行下拉选择的时候一般时候只会显示name。 即 vp.project 里面的name

有些需求就是要下拉选择的时候能看的project_name. 因为这个vp number只是一个编号不能确定是不是所选的。

要想实现这个功能就要在类 vp_project 里面添加方法

  @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 字段也会显示出来

  

要实现输入project name 能搜索到想要的字段只有这样还不可以。 比如现在输入SW 第一个project不会被过滤出来。 

要想实现多列搜索 得在类中再添加一个方法:

  @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 就可以把搜索到想要的记录了


标签: odoo openerp
共有 人打赏支持
Fly_f
粉丝 9
博文 34
码字总数 14633
×
Fly_f
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: