2017-07-17 52 views
0

我最近遇到了Django的Viewflow庫,我似乎是一個非常強大的工具來創建複雜的工作流程。Django-ViewFlow:如何添加CRUD視圖流

我的應用程序是一個簡單的票務系統,當工作流程是通過創建一個Ticket來啓動的,那麼用戶應該能夠通過一個CRUD頁面創建零個或多個與票據關聯的WorkLog,類似於標準的Django admin change_list/detail。

列表視圖的模板應該是什麼樣子?我想將UI集成到圖書館的前端。

流清楚地利用了以下觀點:

1)CreateView的用於訂票

2a)的工作日誌的的ListView中,模板具有控制 '後退', '添加'(轉到步驟2b)中,「完成'(轉到第3步)。

2b)中CreateView的用於工作日誌

3)結束

代碼:

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__' 

流動。 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() 

回答

0

您可以在不同視圖或相同視圖中處理該問題,只需在工作日誌添加請求上調用activation.done即可。您可以通過檢查request.POST數據中按下哪個按鈕來完成此操作。

@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})