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)