Обработка динамического MultipleChoiceField в django

Все ответы, которые я видел на это до сих пор, сбили меня с толку.

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

person Roger    schedule 21.08.2010    source источник


Ответы (1)


... это не работает...

Ты уверен? Вы проверили это? Обычно значение cleaned_data для MultipleChoiceField представляет собой список значений, выбранных в форме.

Так что да, он возвращает question_1 только один раз, но само это возвращаемое значение содержит несколько значений.

person Daniel Roseman    schedule 21.08.2010
comment
ага, работает. мне нужно было сделать небольшую настройку. спасибо - не был уверен, что иду в правильном направлении. - person Roger; 21.08.2010
comment
что происходит, когда я использую множественный выбор в форме multipart/form-data? очищенные_данные возвращаются Нет! :( - person Dev.K.; 26.05.2017