2016-05-16 2 views
0

私はformsetファクトリを使用して、フォーム要素の動的セットを生成しています。ダイナミックラジオボタンとドロップダウンメニューを追加したいのですが、ChoiceFieldを使用すると、search.is_valid()はfalseに評価されます。私は間違ったことをしていると確信していますが、見つけられません。Django formset factory ChoiceFieldにより、is_validが失敗し、falseが返されます

... 
    search_formset = formset_factory(SearchForm, extra=num_extra_charts) 

    # data to initialize forms 
    data = { 
     'form-TOTAL_FORMS': str(num_extra_charts), 
     'form-INITIAL_FORMS': str(num_extra_charts), 
     'form-MAX_NUM_FORMS': '', 
    } 
    self.search_forms = search_formset(get_request or data) 
    if self.search_forms.is_valid(): 

... 

class SearchForm(forms.Form): 

    ORDERS = [('ASC', 'ASC'), 
      ('DESC', 'DESC')] 

    search = forms.CharField(label='', 
         max_length=250, 
         required=False, 
         widget=forms.TextInput(
          attrs={'placeholder': 'ex. Matt Damon AND war'}), 
         ) 

    property = forms.CharField(label='', 
          max_length=250, 
          required=False, 
          widget=forms.TextInput(
           attrs={'placeholder': 'Property Filter'}), 
          ) 

    limit = forms.CharField(label='', 
         max_length=250, 
         required=False, 
         widget=forms.TextInput(
          attrs={'placeholder': 'Limit - Default: 25'}), 
         ) 

    orders = forms.CharField(widget=forms.Select(choices=ORDERS)) 

答えて

1

あなたは持っている:

self.search_forms = search_formset(get_request or data) 

これは珍しいです。これは、formsetが常にバインドされていることを意味します。あなたはrequired=Falseを持っていないドンので

通常は、そうしないとエラーになります、それはあなたがフォームデータでordersのフィールドの値を提供しなければならないことを意味し、

self.search_forms = search_formset(get_request or None) 

を持っているでしょう。

+0

はい、私は約5分後にそれを実現しました。しかし、私が理解しているところから、formsetはデータの初期値を持たなければならないか、管理エラーが発生します。 – Optimus

+0

formsetが* bound *の場合は、管理フォームの値のみが必要です。フォームがバインドされていない場合(例えば、 'self.search_formset(None)'または 'self.search_formset()')、管理エラーは発生しません。 [バインドされたフォームとバインドされていないフォーム](https://docs.djangoproject.com/en/1.9/topics/forms/#bound-and-unbound-form-instances)のドキュメントを参照してください。 – Alasdair

+1

私のhtmlテンプレートに '{{management_form}}'が必要であることを知る前に、データ変数を追加したということが鍵でした。それから、すべてが機能したので、私はそれを削除しませんでしたありがとう、これははるかにクリーン/今理解しやすいです。 – Optimus

関連する問題