2009-04-29 10 views

Respuesta

61

Check out the QueryDict documentation, particularmente el uso de QueryDict.getlist(key).

Desde request.POST y request.GET en la vista son instancias de QueryDict, usted puede hacer esto:

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

Entonces algo como esto:

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

Esto falla cuando la clave es importante. Por ejemplo name = "question [4]" donde 4 es question id. – Pawka

5

Django no proporciona una forma para obtener matrices asociativas (diccionarios en Python) desde el objeto de solicitud. Como señaló la primera respuesta, puede usar .getlist() según sea necesario, o escribir una función que puede tomar un QueryDict y reorganizarlo a su gusto (sacando pares clave/valor si la clave coincide con algún patrón key[*], por ejemplo).

18

Lo siento por desenterrar esto, pero Django tiene un utils.datastructures.DotExpandedDict. Aquí está un pedazo de él docs:

>>> 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 única diferencia es que utiliza puntos de su lugar de corchetes. Creo que ahora se reemplaza conceptualmente con formularios prefijados en formsets, pero la clase queda en la base del código.

+0

Esta es la mejor solución que he encontrado. Gracias. – Pawka

+2

Confío en DotExpandedDict en mis aplicaciones Django, y es mucho más útil que QueryDict.getlist. Lamentablemente, se ha eliminado de Django (al menos la versión de desarrollo). Sin embargo, aún puede [obtener el código fuente] (https://github.com/django/django/commit/c57abd3c29cedcca00821d2a0d5708f10977f3c6#django/utils/datastructures.py). – Matt

+2

DotExpandedDict se elimina desde django 1.5 – lolesque

Cuestiones relacionadas