アンケートについては、一連のフォームをユーザーに提示したいと考えています。ビューのジェネリックを保ち、シーケンス内の任意のフォームインスタンスを表示できるようにしたいと思います。順番に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))
あなたに役立つかもしれない別のポストは、あなたが[フォームウィザード](https://docs.djangoproject.com/en/dev/ref/を見てきましたですcontrib/formtools/form-wizard /)? – jterrace
はい。フォームウィザードが制限されていることがわかりました。 (私が知る限りは)サーバー上の各ステップからの入力データを保存しません。ユーザーがフォームの記入をやめて後で戻ってくる場合、これは長いフォームのリスクです。 – Ari
@Ari:あなたはdjango-merlinを使いましたか?共有する作業コードがありますか? –