在django中处理动态MultipleChoiceField

时间:2010-08-21 13:21:41

标签: django django-forms

到目前为止,我所看到的所有答案都让我很困惑。

我制作了一个根据传入的参数动态构建的表单,以及存储在数据库中的问题。这一切都很好(注意:它不是ModelForm,只是一个Form)。

现在我正在尝试保存用户的回复。如何迭代他们提交的数据以便我保存?

MultipleChoiceFields让我特别困惑。我将它们定义为:

self.fields['question_' + str(question.id)] = forms.MultipleChoiceField(
                label=mark_safe(required_tag +
                    question.label + "<br/>Choose any of the following answers"),
                help_text=question.description,
                required=question.required,
                choices=choices,
                widget=widgets.CheckboxSelectMultiple())

当我选择多个选项时,实际发布的数据类似于:

question_1=5&question_1=6

django会自动意识到这些都是同一表单上的两个选项,让我在某个地方访问一个iterable吗?我打算做点什么:

for field in self.cleaned_data:
        print field      # save the user's response somehow

但这不起作用,因为这只会返回question_1一次,即使提交了两个值。

回答:如果我循环浏览self.fields而不是self.cleaned_data,for循环现在可以正常工作了:

for field in self.fields:
    print self.cleaned_data[field]

1 个答案:

答案 0 :(得分:0)

  

......这不起作用......

你确定吗?你测试过吗?通常,MultipleChoiceField的cleaned_data值是表单上选择的值的列表。

所以是的,它只返回question_1一次,但返回值本身包含多个值。