概要
我正在开发一个 Web 应用程序来学习 Django(python 3.4 和 Django 1.6.10)。Web 应用程序具有复杂且经常更新的工作流程。我决定集成 Django-Viewflow 库(https://github.com/viewflow/viewflow/),因为它似乎是一种处理工作流的非常方便的方法,并且不会将工作流逻辑与应用程序模型结合起来。
在这种情况下,我创建了一个工作流来使用 Django-Viewflow 库收集作者信息和版权。每次将作者添加到书籍时,都应启动工作流。
我的问题
该文档提供了集成端到端工作流解决方案(前端和后端)的分步指南。我的问题是我很难以编程方式控制工作流程(特别是来自 Book 模型)。
申请说明
我有一个与作者有多对多关系的 Book 模型(核心模型)。
myApp/models.py
class Book(models.Model):
title = models.CharField(max_length=100)
authors = models.ManyToManyField(Author)
publisher = models.ForeignKey(Publisher)
publication_date = models.DateField()
工作流组件是:
myFlow/models.py
from viewflow.models import Process
class AuthorInvitation(process)
consent_confirmed = models.BooleanField(default=False)
signature = models.CharField(max_length=150)
myFlow/flows.py
from viewflow import flow
from viewflow.base import this, Flow
from viewflow.contrib import celery
from viewflow.views import StartProcessView, ProcessView
from . import models, tasks
class AuthorInvitationFlow(Flow):
process_cls = models.AuthorInvitation
start = flow.Start(StartProcessView) \
.Permission(auto_create=True) \
.Next(this.notify)
notify = celery.Job(tasks.send_authorship_request) \
.Next(this.approve)
approve = flow.View(ProcessView, fields=["confirmed","signature"]) \
.Permission(auto_create=True) \
.Next(this.check_approve)
check_approve = flow.If(cond=lambda p: p.confirmed) \
.OnTrue(this.send) \
.OnFalse(this.end)
send = celery.Job(tasks.send_authorship) \
.Next(this.end)
end = flow.End()
问题
如何以编程方式控制工作流程(激活、确认步骤、重做步骤、取消流程……)?我试图深入研究图书馆的代码。似乎class activate
包含正确的方法,但不确定应该如何编排整体。
提前致谢!