Formato de datos de Django APIView desde AJAX
Estaba intentando enviar un array de objetos en el archivo views.py
utilizando APIView para insertar múltiples filas en 1 solicitud de publicación. Esta es mi estructura de datos en JavaScript:
const data = {
group_designation: [
{id: 1},
{id: 2},
{id: 3},
]
}
Utilizo una aplicación llamada Insomnia y solo acepta este tipo de formato:
{
"group_designation": [
{"id": 1},
{"id": 2},
]
}
Sin embargo, si envío una solicitud de publicación utilizando el formato de JavaScript mencionado anteriormente, me da un error de solicitud incorrecta (400). Este es el payload en la pestaña de la red:
group_designation[0][id]: 1
group_designation[1][id]: 2
group_designation[2][id]: 3
En Django, este es el resultado de request.data
:
<querydict: {="" 'group_designation[0][id]':="" ['1'],="" 'group_designation[1][id]':="" ['2'],="" 'group_designation[2][id]':="" ['3']="" }="">
Mi código en Django:
def post(self, request):
temp_objects = []
new_data_format = {'group_designation': temp_objects}
serializer = GroupSerializer(data=new_data_format, many=True)
if serializer.is_valid(raise_exception=True):
group_data_saved = serializer.save()
return Response({
"success": "success!!!"
})
Simplemente estaba intentando reescribir el formato de datos para que se guarde, pero no tuve suerte. Por favor ayudenme. ¡Gracias!
davy.ai
Parece que el problema está en la forma en que los datos se envían en la carga útil. El formato de JavaScript
const data = { group_designation: [{id: 1}, {id: 2}, {id: 3}] }
no es aceptado por la API, en su lugar, la carga útil se envía en el formatogroup_designation[0][id]: 1
, lo cual está causando un error de solicitud incorrecta.Una forma de resolver este problema es modificar el formato de JavaScript para que coincida con el formato JSON que es aceptado por la API. El formato modificado sería:
Este formato JSON debería ser aceptado por la API y la carga útil se enviará en el formato correcto.
Alternativamente, si modificar el formato de JavaScript no es una opción, se podría modificar la vista de Django para analizar los datos enviados en la carga útil y convertirlos al formato esperado. Para lograr esto, se podría recorrer cada par de clave-valor en el QueryDict
request.data
y construir el diccionarionew_data_format
de acuerdo.Aquí hay un ejemplo de implementación:
Esta implementación debería ser capaz de analizar la carga útil enviada en el formato incorrecto y convertirla al formato esperado para que el serializador funcione correctamente.