KeyError: "Получена ошибка KeyError при попытке получить значение для поля `password` на сериализаторе `LoginSerializer`".

У меня есть представление входа в систему, которое выглядит следующим образом, но я продолжаю получать KeyError всякий раз, когда обращаюсь к API. Я не могу решить эту проблему с помощью соответствующих ответов.

class LoginAPIView(GenericAPIView):
    serializer_class = LoginSerializer

    def post(self, request):
        serializer = self.serializer_class(data=request.data)
        serializer.is_valid(raise_exception=True)
        return Response(serializer.data, status=status.HTTP_200_OK)

Сериализатор выглядит следующим образом:

class LoginSerializer(serializers.ModelSerializer):
    email = serializers.EmailField()
    password = serializers.CharField(min_length=6)
    username = serializers.CharField(read_only=True)
    tokens = serializers.CharField(read_only=True)

    class Meta:
        model = User
        fields = ["email", "password", "username", "tokens"]

    def validate(self, attrs):
        email = attrs.get("email", "")
        password = attrs.get("password", "")

        user = auth.authenticate(email=email, password=password)

        if not user:
            raise AuthenticationFailed("Invalid credentials")
        if not user.is_active:
            raise AuthenticationFailed("Account is not active, please contact admin")

        return {
            "email": user.email,
            "username": user.username,
            "tokens": user.tokens(),
        }

когда я обращаюсь к этой конечной точке, я получаю эту ошибку:

KeyError: "Got KeyError when attempting to get a value for field `password` on serializer `LoginSerializer`.\nThe serializer field might be named incorrectly and not match any attribute or key on the `dict` instance.\nOriginal exception text was: 'password'."

полная ошибка ниже.

Как мне его починить?

Вот как я заставил его работать. Я сделал пароль в LoginSerializer только для записи

перед:

password = serializers.CharField(min_length=6)

после:

password = serializers.CharField(min_length=6, write_only=True)
Вернуться на верх