2017-07-17 1 views
0

Ich bin kürzlich auf die Viewflow-Bibliothek für Django gestoßen, die ich als sehr leistungsfähiges Werkzeug für die Erstellung komplexer Workflows erachte.Django-ViewFlow: Hinzufügen von CRUD-Ansichten zum Fluss

Meine App ist ein einfaches Ticketing-System, bei dem der Workflow durch Erstellen eines Tickets gestartet wird. Anschließend sollte ein Benutzer in der Lage sein, mit dem Ticket über eine oder mehrere CRUD-Seiten null oder mehr WorkLogs zu erstellen, ähnlich dem Standard Django Admin Änderungsliste/Detail.

Wie sollte die Vorlage für die Listenansicht aussehen? Ich möchte die Benutzeroberfläche in das Frontend der Bibliothek integriert haben.

Die Strömung deutlich die folgenden Ansichten verwendet:

1) Create für Ticket

2a) Listview of WorkLog ES, Template-Kontrollen 'zurück' hat, 'Hinzufügen' (geht 2b) zu dem Schritt ‚done '(geht zu Schritt 3).

2b) für Create WorkLog

3) Ende

Code:

models.py:

class TicketProcess(Process): 
    title = models.CharField(max_length=100) 
    category = models.CharField(max_length=150) 
    description = models.TextField(max_length=150) 
    planned = models.BooleanField() 

    worklogs = models.ForeignKey('WorkLog', null=True) 


class WorkLog(models.Model): 
    ref = models.CharField(max_length=32) 
    description = models.TextField(max_length=150) 

views.py:

class WorkLogListView(FlowListMixin, ListView): 

    model = WorkLog 


class WorkLogCreateView(FlowMixin, CreateView): 

    model = WorkLog 
    fields = '__all__' 

fließt. py:

from .views import WorkLogCreateView 
from .models import TicketProcess 

@frontend.register 
class TicketFlow(Flow): 
    process_class = TicketProcess 

    start = (
     flow.Start(
      CreateProcessView, 
      fields = ['title', 'category', 'description', 'planned'] 
     ).Permission(
      auto_create=True 
     ).Next(this.resolution) 
    ) 

    add_worklog = (
     flow.View(
      WorkLogListView 
     ).Permission(
      auto_create=True 
     ).Next(this.end) 
    ) 

    end = flow.End() 

Antwort

0

Sie können, dass in einer anderen Ansicht handhaben, oder in der gleichen Ansicht, rufen einfach nicht activation.done auf einer worklog Zugabe Anfrage. Sie können dies tun, indem Sie überprüfen, welche Schaltfläche in den request.POST-Daten gedrückt wurde.

@flow.flow_view 
def worklog_view(request): 
    request.activation.prepare(request.POST or None, user=request.user) 
    if '_logitem' in request.POST: 
     WorkLog.objects.create(...) 
    elif request.POST: 
     activation.done() 
     request.activation.done() 
     return redirect(get_next_task_url(request, request.activation.process)) 
    return render(request, 'sometemplate.html', {'activation': request.activation})