如何在django formset中访问表单的数据

时间:2011-12-25 06:30:33

标签: django django-forms formset

我在从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()返回True

ERROR

异常类型:KeyError

异常值:'action_name'

POST DATA

form-0-action_name u'a'

form-2-description u'sadsa'

form-0-description u'a'

form-MAX_NUM_FORMS u''

form-1-description u'asd'

form-TOTAL_FORMS u'3'

form-1-action_name u'as'

form-INITIAL_FORMS u'0'

csrfmiddlewaretoken u'c4fa9ddb4ec69ac639d7801eb14979f2'

form-2-action_name u'asda'

2 个答案:

答案 0 :(得分:2)

主要问题是你有一张空白表格。您正在使用表单类定义中的模型字段,django的表单框架不知道如何处理。 Django模型!= django形式。

formset正在验证并返回空表单,当然这些表单没有表单字段。

您应该使用有效的表单字段从表单中创建Formset,或者从ModelFormset中创建Model

  • 更新:我最初认为formsets没有cleaned_data,但我猜他们会返回所有表单的cleaning_datas列表,这意味着您的代码问题就在上面。

答案 1 :(得分:0)

formset在self.forms中存储它所有关联的表单,迭代它将为表单返回一个迭代器iter(self.forms)

您的POST数据看起来不错,所以这就是您可以使用它的方法:

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