Daniel Romero Geigel
Daniel Romero Geigel

Reputation: 11

How to apply search function on Many2many field in odoo 14

I have 3 models that relate to 2 many2many fields as follows

class ModelA(models.Model):
    _name = 'model.a'

   name = fields.Char("ModelA")

class ModelB(models.Model):
    _name = 'model.b'

   name = fields.Char("ModelB")
   model_a_ids = fields.Many2many('model.a')

class ModelC(models.Model):
    _name = 'model.c'

   name = fields.Char("ModelC")
   model_b_ids = fields.Many2many('model.b')

def search_all_model_a(self):

and I am trying to get all the model.a that belong to model c in the search_all_model_a method

Upvotes: 0

Views: 894

Answers (1)

CZoellner
CZoellner

Reputation: 14768

Presumptions:

a) search_all_model_a belongs to class ModelC

b) self of search_all_model_a can be a multi recordset of ModelC

Sotution:

def search_all_model_a(self):
    return self.mapped('model_b_ids').mapped('model_a_ids')

Or the long form with some comments:

def search_all_model_a(self):
    # empty model.a and model.b recordset
    model_a_result = self.env['model.a']
    model_b_temp_result = self.env['model.b']
    # first get all model.b records
    for model_c_record in self:
        # add linked model.b records
        model_b_temp_result |= model_c_record.model_b_ids
    # and then get all model.a records from the model.b records
    for model_b_record in model_b_temp_result:
        # add linked model.a records
        model_a_result |= model_b_record.model_a_ids
    return model_a_result

Upvotes: 1

Related Questions