2009-03-06 6 views
45

J'utilise quelque chose comme ça dans mon modèleDjango: en utilisant <select multiple> et POST

<select multiple="multiple" name="services" id="services" size="5"> 
    {% for service in services %} 
     <option value="{{service.id}}">{{service}}</option> 
    {% endfor %} 
</select> 

Quand je regarde les données POST dans Firebug ou le débogage Django, je le vois envoie une seule valeur. Est-ce que je fais quelque chose de mal ou de mal comprendre un concept?

+0

Quelle est la valeur des services fournis au modèle? –

+0

Voulez-vous dire: services = Service.objects.all() render_to_response de retour ('de add.html', { 'services': services}) ?? (Je n'arrive pas à mettre ces commentaires en forme du tout.) – neoice

+3

@neoice: Conseil: n'ajoutez pas de détails à vos questions dans les commentaires. Modifiez votre question pour ajouter des faits. La question est toujours formatée correctement. ET la question devrait se tenir toute seule sans un fil de commentaires. –

Répondre

110
request.POST.getlist('services') 
+0

Jackpot! Je pense que j'ai _did_ besoin de changer les services aux services [], mais obtenir des listes de réservation pour cela. Je pensais avoir parcouru les docs de Django mais apparemment, j'avais tort. – neoice

+5

Vous n'avez pas besoin du []. C'est une convention limitée à PHP. – bobince

+0

Il peut être utile de mentionner que cela fonctionne également pour les données GET. 'request.GET.getlist ('services')' – Aaron

8

Juste Pour votre information, je devais utiliser:

list = request.POST.getlist("items[ ]") 

car l'omission du [] fait publier la liste vide à retourner au lieu des valeurs correctes. J'utilise jQuery pour récupérer les valeurs d'un élément select multiple, et jQuery semble ajouter le []

1

Attention! La méthode getlist de QueryDict renvoie une liste vide si la clé n'existe pas. Il ne lance pas d'exception. http://bit.ly/MdgrUH

0

vous pouvez obtenir la liste prévue juste en utilisant ...

request.POST.getlist('fiel_name') 
0

request.POST.getlist ('services')

a marché pour moi. ou vous pouvez définir le nom de la boîte de sélection comme une liste

+0

comment cette réponse peut-elle améliorer ceci: https://stackoverflow.com/a/618626/982161 ?? –

Questions connexes