2016-07-04 4 views
1

私はプロジェクトでDjango Form Wizardを使用しています。ユーザーが特定のフィールドの初期データを提供できるようにしたいのですが、初期データを含むフィールドを無効にしたいと考えています。Djangoフォームウィザードステップ間の永続的な初期データ

ユーザーが[戻る]ボタンをクリックすると、初期データが消去されるという問題があります。例えば

これは私のフォームです(初期データは、第二段階として設定されている) enter image description here あなたはすべてがここに罰金です見ることができるように、フォームフィールドは無効になり、値が選択されています。今すぐnextをクリックします。

enter image description here enter image description here

フォームフィールドは、まだ無効になっていますが、値が消えています。..私たちはnextをクリックして、我々は問題のない第二のステップに行くが、今、私はbackをクリックすると!

私が使用しているコードは、この(関連部分)のようになります:
フォーム

CHOICES=[('ONE','Choice 1'), 
     ('TWO','Choice 2'), 
     ('THREE','Choice 3'), 
     ('FOUR','Choice 4'), 
     ] 

class BookingForm1(forms.Form): 
    """ Select reservation type""" 
    sko = forms.ChoiceField(choices=CHOICES, widget=forms.RadioSelect()) 

ウィザード

def get_form(self, step=None, data=None, files=None): 
     form = super(PresentView, self).get_form(step, data, files) 
     step = step or self.steps.current 

     initial = { 
      'sko': { 
       'initial':'TWO' 
      } 
     } 

     for field in initial: 
      try: 
       form.fields[field].widget.attrs['readonly'] = True 
       form.fields[field].widget.attrs['disabled'] = True 
       form.fields[field].required = False 
       form.fields[field].initial = initial[field]['initial'] 
      except: 
       pass 

任意のアイデアをいただければ幸いです!

+0

私はあなたのための修正はありませんが、ここではそれが機能していない理由の説明です:フィールドを無効にすると、ブラウザは値をサーバーに送信しません。元のフォームに戻ると、フォームがバインドされているため、Djangoはフォームデータを使用して、「初期」データを無視します。ただし、フォームデータには無効なフィールドの値が含まれていないため、フォームのレンダリング時に値は選択されません。 – Alasdair

答えて

1

私が解決できる方法は、ChoiceFieldタイプのオブジェクトの余分なフィールドを削除することでした。

for field in initial: 
      try: 
       field_o = form.fields[field] 
       # Remove extra choices if Choice field 
       if type(field_o) == forms.fields.ChoiceField: 
        field_o.choices = [(key, value) for key,value in field_o.choices if key == initial[field]['initial']] 
       else: 
        field_o.widget.attrs['readonly'] = True 

       field_o.initial = initial[field]['initial'] 
      except: 
       pass 
関連する問題