Django Formset迭代出错了

时间:2011-06-22 07:31:27

标签: django forms formset

我试图使用正常迭代(就像Django文档中显示的那样)为formset中的每个表单获取cleaning_data:

MyFormSet = formset_factory(form=MyForm, formset=MyBaseFormSet)
my_form_set = MyFormSet(request.POST or None, initial = my_data, prefix = 'myform')

之后我正在验证并尝试遍历每个表单并打印出这样的值:

for f in my_form_set.forms:
    print(f.cleaned_data)

但我得到的结果是这样的:

<QueryDict: {"myform-0-field_a" : "this is a", "myform-1-field_a" : "this is second a"}>
<QueryDict: {"myform-0-field_a" : "this is a", "myform-1-field_a" : "this is second a"}>

我期望获得单独的键和值,但相反,对于每次迭代,我都会得到POST数据的全部内容。

我期待这样的事情:

迭代0:

"field_a" : "this is a"

迭代1:

"field_a" : "this is second a"

我在哪里错过?

由于

1 个答案:

答案 0 :(得分:2)

每个表单字段的标签都必须是唯一的,否则无法说明 从哪个数据来源。 “myform-0-field_a”,“myform-1-field_a”是键/标签 浏览器会在一个帖子中向您发送所有字段。

因为f.cleaned数据接缝是一个子类dict,这可能会起作用

    for k, v in f.cleaned_data.items():
        print k.split('-')[-1], v

https://docs.djangoproject.com/en/dev/ref/request-response/#querydict-objects