Я использую django-viewflow для отслеживания сложных бизнес-процессов.Чтобы избежать длинных классов Flow и файлов flows.py, я бы хотел, чтобы один поток передавался в другой.Возможно ли это?
Я пробовал следующий код, но Python генерирует исключение NotImplemented.
class SecondFlow(Flow):
process_class = SecondProcess
start = (...)
class FirstFlow(Flow):
process_class = FirstProcess
start = (
flow.Start(
CreateProcessView,
fields=['foo']
).Next(SecondFlow.start)
)
Было бы здорово, если бы FirstFlow перенаправил в начало SecondFlow.
Редактировать: я пытался использовать предоставленные рекомендации и документацию, но получаю следующую ошибку: у объекта 'StartFunction' нет атрибута 'prepare'
Ниже приведен мой новый код.
from viewflow import flow, frontend
from viewflow.base import this, Flow
from viewflow.flow.views import CreateProcessView, UpdateProcessView
from .models import FirstProcess, SecondProcess
@frontend.register
class SecondFlow(Flow):
process_class = SecondProcess
start = flow.StartFunction(this.create_flow
).Next(this.enter_text)
def create_flow(self, activation, **kwargs):
activation.prepare()
activation.done()
enter_text = (
flow.View(
UpdateProcessView,
fields=['text']
).Next(this.end)
)
end = flow.End()
@frontend.register
class FirstFlow(Flow):
process_class = FirstProcess
start = (
flow.Start(
CreateProcessView,
fields=['text']
).Next(this.initiate_second_flow)
)
initiate_second_flow = (
flow.Handler(this.start_second_flow
).Next(this.end)
)
def start_second_flow(self, activation):
SecondFlow.start.run()
end = flow.End()
Второе редактирование: работает после того, как я добавил декоратор к методу create_flow
SecondFlow.
from django.utils.decorators import method_decorator
...
@frontend.register
class SecondFlow(Flow):
process_class = SecondProcess
start = flow.StartFunction(this.create_flow
).Next(this.enter_text)
@method_decorator(flow.flow_start_func)
def create_flow(self, activation, **kwargs):
activation.prepare()
activation.done()
...