46 votes

Equivalent Django du tableau valeur / tableau associatif de PHP

En PHP, je le ferais pour obtenir name sous forme de tableau.

 <input type"text" name="name[]" />
<input type"text" name="name[]" />
 

Ou si je voulais obtenir name 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?

64voto

Paolo Bergantino Points 199336

Consultez la documentation QueryDict , en particulier l'utilisation de QueryDict.getlist(key) .

Puisque request.POST et request.GET dans la vue sont des instances de QueryDict, vous pouvez procéder comme suit:

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

Alors quelque chose comme ça:

 def mypath(request):
    if request.method == 'POST':
        greetings = request.POST.getlist('hi') # will be ['heya1','heya2']
 

18voto

gzy Points 161

Désolé, mais Django a un fichier utils.datastructures.DotExpandedDict. Voici un morceau de sa documentation:

 >>> 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. Je pense qu'il est maintenant conceptuellement remplacé par des formes préfixées dans des formsets, mais la classe est laissée dans la base de code.

5voto

Grant Points 1159

Django ne fournit pas un moyen d'obtenir des tableaux associatifs (dictionnaires en Python) à partir de l'objet de 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 la réorganiser à votre guise (en extrayant des paires clé / valeur si la clé correspond à un motif key[*] , par exemple).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X