2009-08-10 1 views
0

私は2日の考え方をどのようにしていますか?Django WizardFormと2番目のフォームは「動的」

私は2つのフォーム(本当に4)、最初の形式を持っているが、ユーザーの選択のxラジオボタンオプション場合は、2番目の形式は異なるものになるのラジオボタンを、持っています。

私の英語では申し訳ありません。

病気について説明します。

最初の形式はオプションが病気「と呼ばれる形式を」持って、私は3フォームの待機を持って、ラジオボタンとオプションがあります。

私はWizardFormについて読んでいたが、私は、動的な方法で二番目の形式を持っ方法がわかりません。

してください必要がこれでいくつかの助け:(

おかげ

答えて

2

あなたがcontrib/formtools/wizard.pyコードを読めばそれはおそらく役立ちます。それは、それはあなたがするために必要なもののよりよい感覚を与えるかなり簡単と以下です

あなた自身のフォームウィザードでオーバーライドする必要があるprocess_stepフックがあります。フォームが検証された場合(つまり、 cleaned_data):

0私が正しくあなたの質問を理解していれば
class MyFormWizard(FormWizard): 

    def process_step(self, request, form, step): 
     if step == 0 and hasattr(form, 'cleaned_data'): 
      # Do special stuff 

は、あなたは第二のステップは、第一のフォームからユーザーの選択に基づいて、特定のフォームを提供したいです。あなたの第2回では、次に

def process_step(self, request, form, step): 
     if step == 0 and hasattr(form, 'cleaned_data'): 
      # The initial attribute is a dictionary which maps the step number 
      # to a dictionary of what should be initial values. 
      # You can use/abuse this in a form's constructor 
      self.initial[1] = {'fields': {'field1': field, 'field2': another}} 

:その場合は、私が最初に試してみてください、使用されるフィールドが(未テスト)最初のフォームからの結果に基づいて第二段階のためのダイナミックな一般的な形式を構築することですフォーム

class MySecondForm(forms.Form): 
    def __init__(self, *args, **kwargs): 
     super(StatBuilderForm2, self).__init__(*args, **kwargs) 

     for name, field in kwargs['initial']['fields'].iteritems(): 
       self.fields[name] = field 
関連する問題