2011-12-25 67 views
1

我在訪問表單數據時遇到問題。我附上的代碼:如何訪問Django formset中的表單數據

####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']。 formset.is_valid()返回真

ERROR

異常類型:KeyError異常

異常值: 'ACTION_NAME'

POST DATA

形式-O-ACTION_NAME u'a」

form-2-description u'sadsa'

形式-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 s,或者從Model s中創建ModelFormset s。

  • 更新:我最初以爲表單集沒有cleaned_data,但我想他們返回的所有形式,這意味着你的代碼問題cleaned_datas的名單只是上面。
0

的表單集存儲了所有它相關的形式self.forms並遍歷它會返回一個迭代iter(self.forms)的形式。

POST數據看起來不錯,所以這是你如何使它發揮作用:

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

這將拋出一個'AttributeError',如表單不實現自己的綁定字段屬性,但通過項目索引(形式['action_name']),最後數據本身將在'cleared_data'字典中。 – 2011-12-25 22:59:52