0

我有一个标准的 viewflow 流程,在其中一种状态下,我想根据其中一个字段中引入的文本值来拆分我的流程。我在 models.py 中以这种方式定义了我感兴趣的领域

estado_de_aprobacion=models.CharField(max_length=15,choices=REVIEW_CHOICES)

我的选择:

REVIEW_CHOICES = (
   ('APROBACION_FINAL', 'Aprobar definitivamente'),
   ('APROBACION_NUEVO_REVISOR', 'Enviar a otro revisor'),
   ('DEVOLVER_EJECUTOR','Devolver al ejecutor')
)

所以基本上发生的事情是显示一个下拉列表,以便用户可以选择其中一个选项,并基于此我在流程中应用以下拆分:

split =(
        #If(lambda activation: activation.process.aprobacion_final)
        flow.Switch()
        .Case(this.end, cond=((lambda act: act.process.estado_de_aprobacion)=='APROBACION_FINAL'))
        .Case(this.revisor_check, cond=((lambda act: act.process.estado_de_aprobacion)=='APROBACION_NUEVO_REVISOR'))
        .Case(this.ejecutar, cond=((lambda act: act.process.estado_de_aprobacion)=='DEVOLVER_EJECUTOR'))
    )

我假设 Lamba 表达式返回包含在指定进程属性中的值,但由于比较不起作用,我认为它是错误的。

4

1 回答 1

1

让我们解开cond价值中发生的事情。

cond=((lambda act: act.process.estado_de_aprobacion)=='APROBACION_FINAL')

(lambda act: act.process.estado_de_aprobacion)返回一个从 中提取相关字段的函数act。然后你将它与 进行比较=='APROBACION_FINAL',这总是会失败,因为你正在比较一个 lambda 函数和一个字符串。所以传递给函数的实际值condFalse.

我假设cond需要一个返回真或假的函数?在这种情况下,您应该在 lambda 函数中进行比较。

cond=lambda act: act.process.estado_de_aprobacion=='APROBACION_FINAL'

原始代码中的提取括号是不必要的,实际上可能是问题的根源。

于 2019-02-21T16:51:19.667 回答