2012-03-08 11 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/form-wizard /)? – jterrace

+0

はい。フォームウィザードが制限されていることがわかりました。 (私が知る限りは)サーバー上の各ステップからの入力データを保存しません。ユーザーがフォームの記入をやめて後で戻ってくる場合、これは長いフォームのリスクです。 – Ari

+0

@Ari:あなたはdjango-merlinを使いましたか?共有する作業コードがありますか? –

答えて

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は面白いですが、サーバー側ではなくセッションにデータを保存するようです。私はこれについて間違っているかもしれませんが、Merlinの文書からはわかりません。 – Ari

+0

セッションデータ*がサーバー側に保存されていることがわかりました。だから、別の見方をする価値がある - メルリンが私の必要とするものかもしれない。 – Ari

関連する問題