Все ответы, которые я видел на это до сих пор, сбили меня с толку.
Я создал форму, которая создается динамически в зависимости от переданного параметра и вопросов, хранящихся в базе данных. Все это прекрасно работает (примечание: это не ModelForm, а просто форма).
Теперь я пытаюсь сохранить ответы пользователя. Как я могу перебрать отправленные ими данные, чтобы сохранить их?
Меня особенно смущают поля MultipleChoiceField. Я определяю их как:
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]