Msgstr "Ожидается список предметов, но есть тип \" dict \ "." - PullRequest
2 голосов
/ 01 апреля 2019

Я пытаюсь создать API для обновления имени и фамилии моего пользователя. Я получаю следующую ошибку в HTTP-ответе

{
    "non_field_errors": [
        "Expected a list of items but got type \"dict\"."
    ]
}

Я написал следующий API и пытаюсь передать ему запрос на исправление.

class UserSelfUpdateView(UpdateAPIView):
    serializer_class = UserUpdateSerializer
    permission_classes = [UserPermissions, ]

    def update(self, request: Request, *args, **kwargs):
        instance = User.objects.filter(id=self.request.user.id)
        serializer = UserUpdateSerializer(instance, data=request.data, many=True)
        serializer.is_valid(raise_exception=True)
        serializer.save()

        return Response({'success': True}, status=status.HTTP_200_OK)

Сериализатор для вышеуказанного запроса:

class UserUpdateSerializer(serializers.ModelSerializer):

    class Meta:
        model = User
        fields: ('id', 'first_name', 'last_name')

Формат, в котором я пытаюсь передать тело моего запроса:

{
    "first_name": "A",
    "last_name": "B"
}

Причина использования

instance = User.objects.filter (id = self.request.user.id)

потому, что я хочу, чтобы функционал таким образом, чтобы только авторизованный пользователь мог изменять только его данные.

1 Ответ

1 голос
/ 01 апреля 2019

Ошибка здесь

serializer = UserUpdateSerializer(instance, data=request.data, many=True)

изменить на

serializer = UserUpdateSerializer(instance, data=request.data)

при передаче many=True необходимо передать набор запросов, а не экземпляр

...