Обработка динамического MultipleChoiceField в Django - PullRequest
2 голосов
/ 21 августа 2010

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

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

1 Ответ

0 голосов
/ 21 августа 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...