TypeError: validate_email () отсутствует 1 обязательный позиционный аргумент: 'пароль' - PullRequest
0 голосов
/ 05 августа 2020

Я пытаюсь переопределить LoginSerializer по умолчанию rest_auth, когда я пытаюсь войти в систему, он выдает эту ошибку. Вот мой код:

settings.py

REST_AUTH_SERIALIZERS = {
    'LOGIN_SERIALIZER': 'Customer.apis.serializers.LoginSerializer',
}

и Login Serializer

class LoginSerializer(serializers.ModelSerializer):

    email = serializers.EmailField(write_only=True)
    password = serializers.CharField(write_only=True)

    class Meta:
        model = Customer
        fields = ['email', 'password']

    def validate_email(self, email, password):
        user = None
        if email and password:
            user = authenticate(email=email,
                                password=password)
        else:
            raise exceptions.ValidationError('Invalid Credentials')
        return user

    def validate(self, attrs):
        email = attrs.get('email')
        password = attrs.get('password')
        user = self.validate_email(email, password)
        attrs['user'] = user
        return attrs

В чем может быть ошибка? И возможное решение?

1 Ответ

1 голос
/ 05 августа 2020

ну, если вы назовете метод как validate_<field_name>, тогда он будет вызываться во время проверки формы (согласно документации ) этого поля, и через этот метод будет передан только один аргумент, который это значение этого поля. Поэтому вам нужно переименовать его во что-нибудь другое. Например:

def verify_credentials(self, email, password):
    user = None
    if email and password:
        user = authenticate(email=email,
                            password=password)
    else:
        raise exceptions.ValidationError('Invalid Credentials')
    return user

def validate(self, attrs):
    email = attrs.get('email')
    password = attrs.get('password')
    user = self.verify_credentials(email, password)
    attrs['user'] = user
    return attrs
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...