2011-12-25 5 views
1

フォームセットからフォームデータにアクセスする際に問題があります。私はコードを添付しました:djangoフォームセットでフォームのデータにアクセスする方法

####FORM 
class ActionTypeForm(forms.Form): 
    action_name = models.CharField(max_length=20) 
    description = models.CharField(max_length=250, blank=True, null=True) 


####VIEW 
dataset = request.POST 
ActionTypeFormSet = formset_factory(ActionTypeForm) 
formset = ActionTypeFormSet(dataset) 

if formset.is_valid(): 
    for form in formset.cleaned_data: #I ALSO TESETED formset.forms 
      customer.create_actiontype(form['action_name'], form['description']) 

エラーはフォーム['action_name']を取得できません。 KeyError例外

例外値:formset.is_valid()真

ERROR

例外タイプを返す 'ACTION_NAME'

POSTデータ

フォーム-0-ACTION_NAMEのu'a」を

フォーム2記述u'sads '

フォーム-0-記述u'a '

フォームMAX_NUM_FORMS U ''

形態-1-記述u'asd'

フォームTOTAL_FORMSのu'3'

フォーム - 1-ACTION_NAMEのu'as'

フォームINITIAL_FORMSのu'0'

csrfmiddlewaretokenのu'c4fa9ddb4ec69ac639d7801eb14979f2'

form-2-action_name u'asda '

答えて

2

主な問題は、空白のフォームがあることです。フォームクラス定義でモデルフィールドを使用していますが、djangoのフォームフレームワークではこれをどうするかわかりません。 Djangoモデル!= django形式。

formsetはフォームフィールドを持たない空のフォームを検証して返します。

有効なフォームフィールドを持つFormsetのフォームを作成するか、ModelFormsetModelを超えて作成する必要があります。

  • アップデート:私は当初、フォームセットがcleaned_dataを持っていないと思ったが、私は彼らがあなたのコードに問題がすぐ上であることを意味している、あらゆる形態のcleaned_datasのリストを返すんだと思います。
0

フォームセットを格納し、すべてのそれはself.formsにフォームを関連付けられていますし、それを反復してフォームのイテレータiter(self.forms)を返します。 (フォームは、属性としてではなく、アイテムのインデックスを経由してそのバウンドフィールドを実装していないよう

if formset.is_valid(): 
    for form in formset: 
     customer.create_actiontype(form.action_name, form.description) 
+2

これは、 'AttributeError'スローされます。

あなたPOSTデータがよさそうだ、これはあなたがそれを動作させることができる方法でありますform ['action_name'])最後にデータそのものは 'cleaned_data'ディレクトリにあります。 –

関連する問題