Краткое содержание
Я разрабатываю веб-приложение для изучения Django (python 3.4 и Django 1.6.10). Веб-приложение имеет сложные и часто обновляемые рабочие процессы. Я решил интегрировать библиотеку Django-Viewflow (https://github.com/viewflow/viewflow/ ), поскольку это кажется очень удобным способом управления рабочими процессами, а не объединением логики рабочего процесса с моделями приложений.
В данном случае я создал рабочий процесс для сбора информации об авторстве и авторских правах с помощью библиотеки Django-Viewflow. Рабочий процесс должен запускаться каждый раз, когда автор добавляется к книге.
Моя проблема
Документация предлагает пошаговые инструкции по интеграции решения для сквозного рабочего процесса (внешнего и внутреннего интерфейса). Моя проблема в том, что мне трудно управлять рабочим процессом программно (особенно из модели 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 /flow.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
содержит правильный метод, но не уверен, как все должно быть организовано.
Заранее спасибо!