2012-03-08 64 views
0

對於調查問卷,我想向用戶呈現一系列表單。我想保持通用視圖,以便它可以在序列中呈現任何表單實例。如何按順序呈現一系列Django表單?

目前,我存儲了表單對象(不是實例)的列表,並且我需要展示每個表單的實例。 (例如formobject = formslist[3]; form = formobject();)。

有沒有更pythonic這樣做?我已經考慮在每個表單的定義中使用getnext函數,但我仍然需要一個地方列出我想要生成的表單序列。

下一步將介紹一些跳過邏輯,所以硬連線表單序列並不理想。

也許這會有所幫助。這是我在我看來,使用getnext函數。它從第一種形式的作品到第二,但當時並沒有服務於第三種形式:

def showform(request): 
    if 'formobj' not in locals(): 
     formobj = StartForm 

    if request.method == 'POST': # If the form has been submitted... 
     form = formobj(request.POST) 

     if form.is_valid(): 
      try: 
       form.save() 
      except: 
       pass 
      cd = form.cleaned_data 
      formobj = form.get_next() 
      form = formobj() 
      if formobj == 'done': 
       render_to_response('doneform.html', context_instance=RequestContext(request)) 
      else: 
       form = formobj() 
    else: 
     form = formobj() 

    return render_to_response('template.html', {'form': form, 'requestpath': request.get_full_path()}, context_instance=RequestContext(request)) 
+0

你是否看了[窗體嚮導]可能會有所幫助(https://docs.djangoproject.com/en/dev/ref/的contrib/formtools /形式的嚮導/)? – jterrace 2012-03-08 20:06:10

+0

是的。我發現表單嚮導有限;它沒有(據我所知)保存來自服務器上每一步的輸入數據。如果用戶想要停止填寫表單並稍後再回來,則這是長表單的風險。 – Ari 2012-03-08 20:30:28

+0

@Ari:你用過django-merlin嗎?你有一些工作代碼可以分享嗎? – 2014-05-22 05:41:25

回答

3

你有沒有看這個表單嚮導期間保存數據的步驟

Using FormWizard and saving the forms data in between before the completion of the whole process?

中也提到該帖子是一個名爲django-merlin的應用程序,它可以滿足您的需求。雖然我沒有親自使用它。

編輯

這裏是另一篇文章給你 Django - form wizard step by step

+0

我已經看了這兩個,但沒有完全得到我想要的地方(或者我不太明白如何去做)。第一個答案確實將數據保存爲序列化格式,但似乎檢索和反序列化不是微不足道的。目前還不清楚這將允許用戶在表單中向後移動。 Django-merlin很有趣,但似乎將數據保存到Session中,而不是在服務器端。我可能對此有錯,但從Merlin的文檔中無法分辨出來。 – Ari 2012-03-08 21:32:53

+0

我現在可以看到會話數據*存儲在服務器端。所以值得再看一次 - 梅林可能是我需要的。 – Ari 2012-03-09 07:00:41