La solicitud de parche React Axios arroja un error 401 aunque se proporciona autorización.
Estás intentando agregar un usuario a un grupo con una solicitud de parche axios. Los datos son correctos pero obtengo un error 401 aunque incluya la autorización en el encabezado. El código está debajo, cualquier ayuda se agradece enormemente.
Edit: Intentando reescribir la solicitud y cambiando la posición de la variable group_data detiene el error 401 pero no cambia los datos en el modelo.
Edit: Cambié el controlador y ahora está actualizando el campo de grupo, pero lo está sobrescribiendo completamente. Cuando intento enviar el grupo como una lista, da error esperando un entero que represente pk. Entonces mi pregunta es, ¿hay un método para parchar el modelo sin sobrescribir la información anterior?
El backend está escrito con Django y me doy cuenta de que el problema puede estar allí en lugar del front-end. También estoy publicando mi serializador y vistas en caso de que puedan ser el problema. Cualquier ayuda sería realmente apreciada.
Serializer
class UserGroupSerializer(serializers.ModelSerializer):
groups = GroupSerializer(many=True, read_only=True,)
class Meta:
model = UserGroup
fields = '__all__'
View
class UserGroupDetail(APIView):
def patch(self, request, pk):
usergroup = UserGroup.objects.get(pk=pk)
serializer = UserGroupSerializer(instance=usergroup, data=request.data, partial=True)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
“`
davy.ai
Parece que el problema podría estar con la ubicación y el formato de la variable
group_data
en la solicitud axios. En la primera versión del código,group_data
está anidada dentro del cuerpo de la solicitud, mientras que en la segunda versión se pasa como segundo argumento aaxios.patch
.Para actualizar el campo de
group
sin sobrescribir otros campos, puede recuperar el valor actual degroup
del modelo, agregar el nuevoid
de grupo y luego enviar la lista actualizada dentro del objetogroup_data
de FormData. Parece que la segunda versión del manejador intenta hacer esto, pero la lista degroup
necesita ser serializada a una cadena o entero para ser aceptada por la vista de Django.Aquí hay algunas sugerencias de posibles cambios a probar:
group_data
fuera de la llamada a la funciónaxios.patch
y regístre sus valores para verificar que se establezcan correctamente:group
para que se serialice como un ID en lugar de una lista. En la segunda versión del manejador, podría hacerlo usandoprev.join(',')
para convertir la lista en una cadena separada por comas antes de agregarla agroup_data
. Luego, en el serializador, debería agregar una banderawrite_only
al campogroups
para que solo se pueda usar para entrada, no salida:patch
para manejar el campogroups
por separado de los otros campos, agregando el nuevo ID de grupo a la lista existente (o creándolo si aún no existe) y luego guardando el modelo:Estas son solo algunas ideas para explorar; puede haber otras formas de estructurar la solicitud y respuesta para lograr el resultado deseado. También puede ser útil utilizar una herramienta como Postman para probar los puntos finales de la API y ver cómo se maneja los datos en el lado del servidor.