SynopsisJak stworzyć proces Django ViewFlow programowo
Zajmuję się tworzeniem aplikacji internetowych, aby dowiedzieć się Django (Python 3.4 & Django 1.6.10). Aplikacja internetowa ma złożone i często aktualizowane przepływy pracy. Zdecydowałem się zintegrować bibliotekę Django-Viewflow (https://github.com/viewflow/viewflow/), ponieważ wydaje się, że jest to bardzo wygodny sposób obsługi przepływów pracy i nie uwzględnia logiki przepływu pracy w modelach aplikacji.
W tym przypadku utworzyłem przepływ pracy w celu gromadzenia informacji o autorze i prawach autorskich przy użyciu biblioteki Django-Viewflow. Przepływ pracy powinien być inicjowany za każdym razem, gdy autor jest dodawany do książki.
mój problem
Dokumentacja oferuje krok po kroku wytycznych do zintegrować end-to-end rozwiązania worklfow (frontend i backend). Mój problem polega na tym, że mam trudności z programową kontrolą przepływu pracy (w szczególności z modelu Book).
Opis aplikacji
Mam modelu Book (model Core) z wiele do wielu relacji autorów.
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()
Składniki cykl pracy są:
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()
Pytanie
Jak można kontrolować proces przepływu pracy programowo (aktywować potwierdzają czynności, powtórzyć kroki anulować proces ....)? Próbowałem zagłębić się w kod biblioteki. Wygląda na to, że class activate
zawiera właściwą metodę, ale nie ma pewności, jak należy zaaranżować całość.
Z góry dziękuję!
Łącze github daje 404, FWIW –
AttributeError: Obiekt "StartFunction" nie ma atrybutu "przygotować" –
Tak, w najnowszej wersji @flow_start_func wymagane jest dodatkowo dekorator. – kmmbvnr