mazzaya sudan
mazzaya sudan

Reputation: 15

Change Many2one domain based on selection field

I want to change M2O field domain based on the user selection from selection field:

  @api.onchange('search_by')
  def _get_partner(self):
        partners  = self.env['customer.regist'].search([('name','!=','New')])
        partner_list = []
        partner_list2 = []
        for rec in partners:
            partner_list.append(rec.name)
            partner_list2.append(rec.phone)
        res = {}
        if self.search_by == 'code':
            res['domain'] = {'search_value': [('name', 'in', partner_list)]}
        if self.search_by == 'phone':
            res['domain'] = {'search_value': [('phone', 'in', partner_list2)]}
        return res

but the domain not change and get the default domain from model

Upvotes: 1

Views: 287

Answers (2)

Sabah HM
Sabah HM

Reputation: 81

Try doing this :

@api.onchange('search_by')
def _get_partner(self):
    partners  = self.env['customer.regist'].search([('name','!=','New')])
    partner_list = []
    partner_list2 = []
    for rec in partners:
        if rec.name :
            partner_list.append(rec.name)
        if rec.phone:
            partner_list2.append(rec.phone)
    res = {}
    if self.search_by == 'code':
        res['domain'] = {'search_value': [('name', 'in', partner_list)]}
    if self.search_by == 'phone':
        res['domain'] = {'search_value': [('phone', 'in', partner_list2)]}
    return res

Make sure that the 'False' values are never added to the domain, since it might give invalid results

Upvotes: 0

Neural
Neural

Reputation: 376

Change your function like this.

@api.onchange('search_by')
  def _get_partner(self):
        partners  = self.env['customer.regist'].search([('name','!=','New')])
        partner_list = []
        partner_list2 = []
        for rec in partners:
            partner_list.append(rec.name)
            partner_list2.append(rec.phone)
        res = {}
        if self.search_by == 'code':
            domain = {'search_value': [('name', 'in',     partner_list)]}
        return {'domain': domain}
        if self.search_by == 'phone':
            domain = {'search_value': [('phone', 'in', partner_list2)]}
        return {'domain': domain}

Upvotes: 1

Related Questions