2011-12-25 69 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