Equivalent Django du tableau valeur / tableau associatif de PHP
Question
En PHP, je le ferais pour obtenir nom
sous forme de tableau.
<input type"text" name="name[]" />
<input type"text" name="name[]" />
Ou si je voulais obtenir le nom
sous forme de tableau associatif:
<input type"text" name="name[first]" />
<input type"text" name="name[last]" />
Quel est l’équivalent de Django pour de telles choses?
La solution
Consultez la documentation QueryDict , en particulier l'utilisation de QueryDict.getlist ( clé)
.
Puisque request.POST et request.GET dans la vue sont des instances de QueryDict, vous pouvez le faire:
<form action='/my/path/' method='POST'>
<input type='text' name='hi' value='heya1'>
<input type='text' name='hi' value='heya2'>
<input type='submit' value='Go'>
</form>
Ensuite, quelque chose comme ceci:
def mypath(request):
if request.method == 'POST':
greetings = request.POST.getlist('hi') # will be ['heya1','heya2']
Autres conseils
Désolé, mais Django possède un fichier utils.datastructures.DotExpandedDict. En voici un extrait:
>>> d = DotExpandedDict({'person.1.firstname': ['Simon'], \
'person.1.lastname': ['Willison'], \
'person.2.firstname': ['Adrian'], \
'person.2.lastname': ['Holovaty']})
>>> d
{'person': {'1': {'lastname': ['Willison'], 'firstname': ['Simon']}, '2': {'lastname': ['Holovaty'], 'firstname': ['Adrian']}}}
La seule différence est que vous utilisez des points au lieu de crochets.
EDIT: Ce mécanisme a été remplacé par les préfixes de formulaire, mais voici l'ancien code que vous pouvez insérer dans votre application si vous souhaitez toujours utiliser ce concept:
Django ne fournit pas un moyen d’obtenir des tableaux associatifs (dictionnaires en Python) à partir de l’objet requête. Comme le soulignait la première réponse, vous pouvez utiliser .getlist ()
selon vos besoins, ou écrire une fonction pouvant prendre un QueryDict
et le réorganiser à votre guise (en tirant la touche Paires / valeur si la clé correspond à un modèle clé [*]
, par exemple).