基于其他字段的计算字段默认值

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)

我的目标是根据预加载字段更改 part_template_ids 默认值。如果 preload 为 True,则 part_template_ids default='_default_part_template_ids' 如果 preload 为 false,则 part_template_ids 的默认值也为 false。我该怎么做?

首先你必须给preload

添加一个默认值
preload = fields.Boolean(
    related='project_id.preload', string='Preload Templates',
    default=False)

这将触发 onchange 事件,即使是在初始创建时也是如此。您可以使用它来填充其他字段的默认值。

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