【问题标题】:how to access form's data in a django formset如何在 django 表单集中访问表单的数据
【发布时间】:2012-01-27 13:09:54
【问题描述】:

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

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

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'

【问题讨论】:

    标签: django django-forms formset


    【解决方案1】:

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

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

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

    【讨论】:

    • 这将抛出一个AttributeError,因为表单不会将其绑定字段实现为属性,而是通过项目索引(form['action_name']),最后数据本身将在@987654326 @字典。
    【解决方案2】:

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

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

    您应该使用具有有效表单字段的表单创建Formsets,或者使用Models 创建ModelFormsets。

    • 更新:我最初认为表单集没有cleaned_data,但我猜它们确实返回了所有表单的cleaned_datas 列表,这意味着您的代码的问题就在上面。

    【讨论】:

      猜你喜欢
      • 2013-08-24
      • 1970-01-01
      • 2014-12-10
      • 1970-01-01
      • 2014-05-04
      • 1970-01-01
      • 2019-04-17
      • 2021-01-08
      • 1970-01-01
      相关资源
      最近更新 更多