Chaban33
Chaban33

Reputation: 1382

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?

Upvotes: 0

Views: 1278

Answers (1)

CZoellner
CZoellner

Reputation: 14768

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']

Upvotes: 1

Related Questions