et désolé pour la réponse tardive.
Il y a deux choses :
- Comment récupérer la valeur sélectionnée par l'utilisateur ?
- Pourquoi passer par un dictionnaire ?
Tout d'abord pour récupérer cette valeur : comme si tu étais passé pas un Forms, tu dois avoir normalement dans ta view quelques choses comme ça (ou MyForm est importé de forms.py) :
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| def test(request):
ctx = {}
if request.method == 'POST':
myForm = MyForm(request.POST)
if myForm.is_valid():
r = myForm.save(commit=False)
## ... ici je peux manipuler les éléments de mon formulaire
r.save()
else : myForm = MyForm()
ctx['myForm'] = myForm
return render(request, 'index.html', ctx) |
Histoire de bien comprendre comment fonctionne Django et comment il traite les request.POST ajoute dans ta view un print. Dans mon cas (Python 3) ça donnerait :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| def test(request):
ctx = {}
if request.method == 'POST':
myForm = MyForm(request.POST)
if myForm.is_valid():
r = myForm.save(commit=False)
print (request.POST)
## ... ici je peux manipuler les éléments de mon formulaire
r.save()
else : myForm = MyForm()
ctx['myForm'] = myForm
return render(request, 'index.html', ctx) |
Tu verras que c'est ni plus ni moins qu'un dictionnaire qui contient les informations rentrées par l'utilisateur de la forme :
{name_de_litem_html: valeur_de_lutilisateur}
Je te laisse deviner ce qui se passera si tu ajoutes dans ton formulaire HTML ta liste déroulante
À la question pourquoi utiliser une liste de dictionnaires. Tout simplement parce que si tu utilises des valeurs depuis une BDD tu pourras en récupérer l'ID donc unique et t'en servir pour renseigner ton select :
<option value={{ i.id }}>{{ i.val }}</option>
Tu t'affranchis ainsi d'avoir deux options avec la même value ... et si tu verras que cette value te sera très utile
J'espère t'avoir aidé mais pas trop non plus chercher c'est le meilleur moyen de comprendre
Bonne continuation.
J
Partager