ウィザードのステップが動的である可能性はありますか? たとえば、2 番目のステップは n 回繰り返し発生しますか?
3 に答える
私は同じ問題を抱えていました.フォームウィザードは(Django 1.4でも)うまくいきませんでした. カスタマイズが多すぎて、いくつかのことがうまくいかなくなり、デバッグがひどいものになりました。
私は既存のクラスに基づいていくつかのコードを書きました。私にとってうまくいった解決策を投稿した私の要点を見てください。コメントや提案(クラス名を含む)があれば、投稿してください。
動的パス (次のフォームは実際の状態とユーザー入力によって異なります) とフォームの数を備えた (数学) グラフとして配置された複数ページのフォーム マネージャー。ストレージと検証が処理されます。Django-1.4 に基づいてい
django.contrib.formtools.wizard.views.SessionWizardView
ます。 https://gist.github.com/3098817カスタム Django セッションストレージ。ファイルを扱うすべての機能を削除しました。Django-1.4
django.contrib.formtools.wizard.storage.base.BaseStorage
およびdjango.contrib.formtools.wizard.storage.session.SessionStorage
. https://gist.github.com/3080251
何をしたいですか ?
ステップxがn回繰り返されるウィザードを作成したい場合、答えは「はい」です。それは可能であり、それほど難しくありません。
特定のパラメーターを指定してクラスを作成するウィザード クラス ファクトリを作成するだけで済みます。
念のため、ウィザードの手順をその場で変更できますか。答えはまだイエスですが、初期化後にウィザードの内部状態を変更する必要があるため、状況はそれよりも少し複雑になります。
これはまったく楽しいことではありません。2 番目のオプションが本当に必要な場合は、それについて検討することをお勧めします。別の設計を見つけて、最後の手段として動的ウィザード アプローチを選択してください。
私もこの問題に苦労しました。Tommaso Barbugli は、クラスのファクトリを作成することについて正しいです。現在、Django 1.6 を使用しています。
URLに、これを含めます:
url('/create_wizard/', factory_wizard, name='factory_wizard')
これは工場です:
class WizardClass(SessionWizardView):
...
def factory_wizard(request, *args, **kwargs):
parameter_to_know_which_step_number = # I let you implement this one ( I did it by the session data )
ret_form_list = [FirstFormClass, SecondFormClass]
for _ in range(parameter_to_know...):
form_list.append(SecondFormClass)
class ReturnClass(WizardClass):
form_list = ret_form_list
return ReturnClass.as_view()(request, *args, **kwargs)