2010-08-21 50 views
2

迄今爲止所見到的所有答案都讓我困惑。在django中處理動態MultipleChoiceField

我製作了一個窗體,它根據傳入的參數以及存儲在數據庫中的問題動態構建。這一切工作正常(注意:它不是一個ModelForm,只是一個表單)。

現在我試圖保存用戶的回覆。我如何迭代他們提交的數據,以便我可以保存它?

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意識到這些是相同的表格上這兩個選項,讓我訪問一個可迭代的地方?我會做這樣的事情:

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

但是,這並不工作,因爲這隻會返回question_1一次,即使有兩個提交的值。

:for循環現在將按預期如果我遍歷的self.fields代替self.cleaned_data

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

回答

0

...這不工作...

你確定?你測試過了嗎?通常,MultipleChoiceField的cleaned_data值是表單中所選值的列表。

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

+0

啊是的,它確實有效。我需要做一些調整。謝謝 - 不知道我是否正朝着正確的方向前進。 – Roger 2010-08-21 13:46:16

+0

當我在multipart/form-data表單中使用多項選擇時會發生什麼? cleared_data返回無! :( – 2017-05-26 03:11:32