1

我在从表单集中访问表单数据时遇到问题。我附上了代码:

####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

错误

异常类型:KeyError

异常值:'action_name'

发布数据

form-0-action_name u'a'

form-2-description u'sadsa'

form-0-description u'a'

表格-MAX_NUM_FORMS u''

form-1-description u'asd'

表格-TOTAL_FORMS u'3'

form-1-action_name u'as'

form-INITIAL_FORMS u'0'

csrfmiddlewaretoken u'c4fa9ddb4ec69ac639d7801eb14979f2'

form-2-action_name u'asda'

4

2 回答 2

3

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

表单集正在验证并返回当然没有表单字段的空表单。

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

  • 更新:我最初认为表单集没有cleaned_data,但我猜它们确实返回了所有表单的 clean_datas 列表,这意味着您的代码的问题就在上面。
于 2011-12-25T07:55:13.327 回答
0

formset 将所有与其关联的表单存储在self.forms其中,对其进行迭代将返回iter(self.forms)表单的迭代器。

您的POST数据看起来不错,因此您可以通过以下方式使其工作:

if formset.is_valid():
    for form in formset: 
        customer.create_actiontype(form.action_name, form.description)
于 2011-12-25T09:57:24.947 回答