Django TypeError:validate_email()缺少1个必需的位置参数:';密码';

Django TypeError:validate_email()缺少1个必需的位置参数:';密码';,django,django-models,django-rest-framework,django-authentication,django-rest-auth,Django,Django Models,Django Rest Framework,Django Authentication,Django Rest Auth,我试图覆盖rest_auth的默认登录序列化程序,当我尝试登录时,它会抛出此错误。 这是我的密码: 设置.py REST_AUTH_SERIALIZERS = { 'LOGIN_SERIALIZER': 'Customer.apis.serializers.LoginSerializer', } 和登录序列化程序 class LoginSerializer(serializers.ModelSerializer): email = serializers.EmailField

我试图覆盖rest_auth的默认登录序列化程序,当我尝试登录时,它会抛出此错误。 这是我的密码:

设置.py

REST_AUTH_SERIALIZERS = {
    'LOGIN_SERIALIZER': 'Customer.apis.serializers.LoginSerializer',
}
和登录序列化程序

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

可能是什么错误?可能的解决方法是什么?

好吧,如果您命名一个方法,如
validate\u
,那么它将在该字段的表单验证(根据)期间被调用,并且只有一个参数将通过该方法传递,即该字段的值。因此,您需要将其重命名为其他名称。例如:

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

validate\u email
方法将只接受1个参数,而不是2个。为此,我遇到了另一个问题。在将其更改为验证\u凭据时,我得到一个非空约束失败:authtoken\u token.user\u id错误。这次可能有什么问题?您需要为此添加完整的错误堆栈跟踪。如果你用这个问题问一个新问题会更好,因为不幸的是,这超出了当前问题的范围。我还建议在新问题中添加更多与该错误相关的代码。:)