Pregunta

En PHP, haría esto para obtener name como una matriz.

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

O si quisiera obtener name como una matriz asociativa:

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

¿Cuál es el equivalente de Django para tales cosas?

¿Fue útil?

Solución

Consulte la documentación de QueryDict , en particular el uso de QueryDict.getlist ( clave) .

Dado que request.POST y request.GET en la vista son instancias de QueryDict, 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']

Otros consejos

Lo siento por desenterrar esto, pero Django tiene un utils.datastructures.DotExpandedDict. Aquí hay una parte de su documentación:

>>> 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 usas puntos en lugar de corchetes.

EDITAR: Este mecanismo fue reemplazado por los prefijos de formulario, pero aquí está el código antiguo que puede colocar en su aplicación si aún desea usar este concepto: https://gist.githffcccccccccccccccffc9f4fc9c4fc9p4fc9ccccccccc9vfc9vcccccc9vgvfvf_vf_vf_9_c_f9_9_f9_9_v_c_f_9_f_c_f_9_f_9_f_c_f_c_f_9_c_f_9_c_fc_fc_f9_v_v_v_v_v_v_v_v_v__v_9_c_9_c_f_9_f9_c_9_c99_c99_ed99dc8ad6ac4fc9f4fccc9799kpc9tave.org

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

scroll top