阶段的 onchange 函数

Onchange function for stage

我在 odoo10 中有两个字段,我想为其中一个添加 @onchange 功能。

在一个字段中我添加了三个工作流程,在第一个工作流程中work1我添加了两个阶段(创建、新建)。同样,对于第二个 work2 和第三个 work3,我添加了两个阶段(草稿、升级)和(分配、待定)。

当我从工作流字段中 select work1 时,相关阶段应显示在阶段字段中。那么,任何人都可以解决这个问题吗?

我的 python 代码如下:

work_flow_stage = fields.Many2one('stage.workflow', string="Work Flow", change_default=True, default=_work_flow_status)
work_stage = fields.Many2one('partner.state', string="Stage")

@api.onchange('work_flow_stage', 'work_stage')
@api.multi
def _work_flow_status(self):
    stage = self.env['stage.workflow'].search([('work_stage', 'in', 'work_flow_stage')], limit=1)
    print "stage", stage
    return stage

该方法不会为您当前的 work_stage 分配任何内容,它只是 return 值,该值将在执行后被忽略。

我假设您在 stage.workflow 中有相同的字段 work_stage。 如果您想通过 @api.onchange 执行此操作,您可以通过两种方式实现它:

@api.onchange('work_flow_stage')
def _onchange_work_flow_stage(self):
    return {
        'value': {
            'work_stage': self.work_flow_stage.work_stage.id
        }
    }

    # ========= OR ===========

    self.work_stage = self.work_flow_stage.work_stage.id

可能可以对关系执行此操作,例如:

work_flow_stage = fields.Many2one('stage.workflow', 'Work Flow', change_default=True)
work_stage = fields.Many2one('partner.state', 'Stage', related='work_flow_stage.work_stage')

不过,我不确定当您立即更改 work_flow_stage 时它是否有效。请发送反馈。

希望,这会有所帮助。