¿Cómo obtener una lista de valores de solicitud GET en Django?
Tengo un punto final:
http://127.0.0.1:8000/auction/?status=['omn','aad']
Necesito obtener la lista de estado, por eso hago lo siguiente
print(request.GET.getlist('status'))
```
It returns me:
```lang-none
[u"['omn','aad']"]
```
which is a list of string of list.
I then use ast.literal_eval to convert string of list to list. Is there a direct method to get the list of status?
En primer lugar, no lo envíes en ese formato. La forma estándar de enviar múltiples valores para un solo HTML es enviar el parámetro varias veces:
http://127.0.0.1:8000/auction/?status=omn&status=aad
que te dará correctamente ['omn','aad']
cuando lo uses request.GET.getlist('status')
.
Ampliando la respuesta de @DanielRoseman.
La forma correcta sería pasar cada variable como se describe: http://127.0.0.1:8000/auction/?status=omn&status=aad
.
Sin embargo, si está utilizando marcos de Javascript modernos (Vue, Angular, React), es muy probable que esté pasando parámetros como un objeto (por ejemplo, si está trabajando con axios, VueResource, etc.). Entonces, esta es la solución alternativa:
Interfaz:
let params = {
status: ['omn', 'aad',]
}
return new Promise((resolve, reject) => {
axios.get(`/auction/`, { params: params }, }).then(response => {
resolve(response.data);
}).catch(error => {
resolve(error.response);
});
});
Luego esto se enviará a Django como la siguiente URL:
[05/Aug/2019 10:04:42] "GET /auction/?status[]=omn&status[]=aad HTTP/1.1" 200 2418
Que luego se puede recoger en la vista correspondiente como:
# Before constructing **parameters, it may neccessary to filter out any supurfluous key, value pair that do not correspond to model attributes:
parameters['status__in'] = request.GET.getlist('status[]')
# Using parameters constructed above, filter the Auctions for given status:
auctions = Auction.objects.filter(is_active=True)
auctions = auctions.filter(**parameters)