Не булевы сравнения в flow.switch (). Case () Django-Viewflow - PullRequest
0 голосов
/ 21 февраля 2019

У меня есть стандартный процесс потока представления, в одном из состояний идентификатор хочет разделить мой процесс на основе текстового значения, введенного в одном из полей.Я определил свою область интересов таким образом в models.py

estado_de_aprobacion = models.CharField (max_length = 15, выборы = 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возвращает значение, содержащееся в указанных атрибутах процесса, но так как сравнение не работает, я думаю, что это неправильно.

1 Ответ

0 голосов
/ 21 февраля 2019

Давайте распакуем то, что происходит в значении cond.

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

(lambda act: act.process.estado_de_aprobacion) возвращает функцию, которая извлекает соответствующее поле из act.Затем вы сравниваете это с =='APROBACION_FINAL', что всегда будет неудачным, потому что вы сравниваете лямбда-функцию и строку.Таким образом, фактическое значение cond, передаваемое функции, равно False.

Я предполагаю, что cond должна быть функцией, которая возвращает истину или ложь?В этом случае вы должны выполнить сравнение в лямбда-функции.

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

Извлекающие скобки в исходном коде не нужны и фактически являются источником проблемы.

...