Search code examples
odooodoo-13odoo-14odoo-15odoo-16

How can i use a field from 3th model for Domain?


Lets Create a Demo for question !

class Characters(models.Model):
    _name = "santex.characters" 
    ​licensor_brand = fields.Many2one("santex.licensor_brands", 
    ​domain="????????????????") # todo 


class LicensorBrands(models.Model):
    _name = "santex.licensor_brands"


    ​licensor_brands = fields.Many2one("res.partner", string="Licensor")


class LicenseContracts(models.Model):
    _name = "santex.license_contracts"

    licensor_contracts = fields.Many2one("res.partner")

Here is my question: For licensor_brand field i need a Domain. This domain should be match "licensor_brands" from "santex.licensor_brands" to "licensor_contracts" from "santex.license_contracts".

Dummuy-Domain: [(santex.licanse_contracts.licensor_contracts), = ,(santex.licensor_brands.licensor_brands)]

THANKS FOR TAKING YOUR TIME !!!

i tried this [(santex.licanse_contracts.licensor_contracts), = ,(santex.licensor_brands.licensor_brands)] but it didn't worked.


Solution

  • You can use a computed field to filter out licensor brands that are not referenced from licensor contracts and use the domain in the view

    Example:

      1. Define the computed field
    def compute_partner_ids(self):
        self.partner_ids = self.env["santex.license_contracts"].search([]).licensor_contracts
    
    partner_ids = fields.Many2many("res.partner", compute='compute_partner_ids')
    licensor_brand = fields.Many2one("santex.licensor_brands")
    
      1. Set the domain attribute on the field tag
    <field name="partner_ids" invisible="1"/>
    
    <field name="licensor_brand" domain="[('licensor_brands', 'in', partner_ids)]"/>