Django-Viewflow中flow.switch()。case()中的非布尔比较

时间:2019-02-20 21:10:30

标签: python django workflow django-viewflow

我有一个标准的视流流程,在一个状态id中,我想根据其中一个字段中引入的文本值拆分我的流程。我已经在models.py

中定义了我感兴趣的领域

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

我的选择:

package main

import (
    "encoding/json"
    "fmt"
    "os"
)

func main() {

    type SimpleResponse struct {
        TextToSpeech string `json:"textToSpeech"`
        DisplayText  string `json:"displayText"`
    }

    type BasicCard struct {
        FormattedText       string `json:"formattedText"`
        ImageDisplayOptions string `json:"imageDisplayOptions"`
    }

    type Items []struct {
        SimpleResponse SimpleResponse `json:"simpleResponse"`
        BasicCard BasicCard `json:"basicCard"`
    }

    type RichResponse struct{
        Items Items `json:"items"`
    }

    group := RichResponse{  
        Items: Items{
            SimpleResponse{"foo1", "foo2"},
            BasicCard{
                FormattedText: "foo3",
                ImageDisplayOptions: "CROPPED",
            },
        },
    }

    b, err := json.Marshal(group)
    if err != nil {
        fmt.Println("error:", err)
    }
    os.Stdout.Write(b)
}

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

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

我假设lamba表达式返回指定过程属性中包含的值,但是由于比较器无法正常工作,我认为它是错误的。

1 个答案:

答案 0 :(得分:1)

让我们解压缩cond值中发生的事情。

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

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

我假设cond必须是一个返回true或false的函数?在这种情况下,您应该在lambda函数中进行比较。

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

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