Search code examples
odoo-8odooodoo-9

Computed field default based on other field


preload = fields.Boolean(related='project_id.preload', string='Preload Templates')

part_template_ids = fields.Many2many(
        'project.part.template', string='Part Templates', required=True,
default='_default_part_template_ids')

  def _default_part_template_ids(self):
        domain = [('case_default', '=', True)]
        return self.env['project.part.template'].search(domain)

my goal is to change part_template_ids default based on preload field. If preload is True then part_template_ids default='_default_part_template_ids' if preload is false then default for part_template_ids is false too. how can i do this?


Solution

  • At first you have to add a default value to preload

    preload = fields.Boolean(
        related='project_id.preload', string='Preload Templates',
        default=False)
    

    That will trigger onchange events, even on initial creation. You can use that to fill default values for other fields.

    @api.onchange('preload')
    @api.multi
    def onchange_preload(self):
        """ Preloads part templates if set to true"""
        if self.preload:
            domain = [('case_default', '=', True)]
            self.part_template_ids = self.env['project.part.template'].search(domain)
        else:
            self.part_template_ids = self.env['project.part.template']