Skip to Content
Menu
This question has been flagged
1 Reply
1722 Views

Hi guys,

I have an model that has a Many2many field that i need to compute it base on another One2many field.

Example:

class Province(models.Model ):

    name = fields.Char()


class Object1(models.Model ):

    name = fields.Char()

    province_ids = fields.One2many('province')


class Object2(models.Model ):

    name = fields.Char()

    object1_ids = fields.One2many('bbject1')

    province_ids = fields.Many2many('province')


In Object2 i want field province_ids ref to all Province object that calculate from all Object1 in object1_ids field.

How can i do that?

Avatar
Discard
Best Answer

Hi,

You can achieve this by using computed fields. You need to create a computed field in the Object2 model that will calculate the province_ids based on the related Object1 records.


Here's an example of how you can modify your code:


python


from odoo import models, fields, api


class Province(models.Model):

    _name = 'province'

    name = fields.Char()



class Object1(models.Model):

    _name = 'object1'

    name = fields.Char()

    province_ids = fields.One2many('object2', 'object1_id')



class Object2(models.Model):

    _name = 'object2'

    name = fields.Char()

    object1_id = fields.Many2one('object1', string='Object1')

    province_ids = fields.Many2many('province', compute='_compute_province_ids')


    @api.depends('object1_id.province_ids')

    def _compute_province_ids(self):

        for obj2 in self:

            provinces = obj2.object1_id.province_ids

            obj2.province_ids = [(6, 0, provinces.ids)]


Regards

Avatar
Discard