2010-08-21 5 views
2

Toutes les réponses que j'ai vu à ce jour m'ont confondu.Traitement dynamique MultipleChoiceField dans django

J'ai créé un formulaire construit dynamiquement en fonction d'un paramètre transmis et des questions stockées dans la base de données. Tout cela fonctionne bien (note: ce n'est pas un ModelForm, juste un formulaire).

Maintenant j'essaie d'enregistrer les réponses de l'utilisateur. Comment puis-je parcourir les données soumises afin de pouvoir les sauvegarder?

Les objets MultipleChoiceFields me troublent particulièrement. Je les définissant comme:

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()) 

Lorsque je sélectionne plusieurs options, les données affichées réelle est quelque chose comme:

question_1=5&question_1=6 

aura-t-django réaliser automatiquement que ce sont les deux options sur la même forme et laissez moi accéder à un itérable quelque part? J'allais faire quelque chose comme:

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

mais cela ne fonctionne pas car cela ne retourne une fois question_1, même si il y avait deux valeurs soumises.

Réponse: La boucle fonctionne maintenant comme prévu si la boucle I à self.fields au lieu de self.cleaned_data:

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

Répondre

0

... cela ne fonctionne pas ...

Êtes-vous sûr? L'avez-vous testé? Normalement, la valeur cleaned_data pour MultipleChoiceField est une liste des valeurs choisies sur le formulaire. Donc, oui, il ne renvoie qu'une fois la question_1, mais cette valeur retournée elle-même contient plusieurs valeurs.

+0

ah oui, ça marche. j'avais besoin de faire un petit tweak. merci - n'était pas sûr si je me dirigeais dans la bonne direction. – Roger

+0

que se passe-t-il lorsque j'utilise un choix multiple dans un formulaire multipart/form-data? clean_data return Aucun! :( –

Questions connexes