Я расширил модель AbstractUser. Но я не могу войти в систему, используя имя пользователя и пароль.

Я создаю API для регистрации. На основе имени пользователя и пароля мне нужно выполнить вход в систему. Но он говорит, что пользователь не найден.

Model.py

class User(AbstractUser):
    """This Class is used to extend the in-build user model """
    ROLE_CHOICES = (('CREATOR','CREATOR'),('MODERATOR','MODERATOR'),('USERS','USERS'))
    GENDER_CHOICES = (('MALE','MALE'),('FEMALE',"FEMALE"),('OTHER','OTHER'))
    date_of_birth = models.DateField(max_length=10, verbose_name='Date of Birth', null=True)
    profile_image = models.ImageField(upload_to='profile_images', verbose_name='Profile Image', default='images/default.webp', blank=True)
    bio = models.TextField(verbose_name='Bio')
    role = models.CharField(max_length=10, verbose_name='Role', choices=ROLE_CHOICES)
    gender = models.CharField(max_length=6, verbose_name='Gender', choices=GENDER_CHOICES)

serializers.py

class LoginSerializer(serializers.ModelSerializer):
    username = serializers.CharField(max_length=25)
    password = serializers.CharField(max_length=25)

    class Meta:
        model = User
        fields = ('username','password')

    def validate(self, **kwargs):
        username = self.validated_data.get("username", None)
        password = self.validated_data.get("password", None)
        print(username)
        print(password)
        user = authenticate(username=username, password=password)
        print(user)
        if user is None:
            raise serializers.ValidationError('User Not Found')
        else:
            return Response({'username':'ronaldo'})

views.py

class UserLoginAPI(viewsets.ModelViewSet):
    serializer_class = LoginSerializer
    queryset = User.objects.all()

    def post(self, request):
        serializer = self.serializer_class(data=request.data)
        serializer.is_valid(raise_exception=True)
        response = {
            'success':'True',
            'status_code':status.HTTP_200_OK,
            'message':'Login Successfully',
        }
        status_code = status.HTTP_200_OK
        return Response(response, status=status_code)

Мне кажется, я делаю это неправильно. Поскольку я использую инструментарий OAuth2 для генерации токена. Поэтому, пожалуйста, помогите

AttributeError: 'NoneType' object has no attribute '_meta'

Попробуйте следующее, используйте метод create вместо post в viewset и вызовите self.perform_create(serializer) для вызова метода 'create' в сериализаторе.

class UserLoginAPI(viewsets.ModelViewSet):
    serializer_class = LoginSerializer
    queryset = User.objects.all()

    def create(self, request, *args, **kwargs):
        serializer = self.get_serializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        self.perform_create(serializer)
        response = {
        'success':'True',
        'status_code':status.HTTP_200_OK,
        'message':'Login Successfully',
         }
         status_code = status.HTTP_200_OK
        return Response(response, status=status_code)


class LoginSerializer(serializers.ModelSerializer):
    username = serializers.CharField(max_length=25)
    password = serializers.CharField(max_length=25)

    class Meta:
        model = User
        fields = ('username','password')

   def validate(self, **kwargs):
       # some validation ( null check)

    def create(self, validated_data):
        username = self.validated_data.get("username", None)
        password = self.validated_data.get("password", None)
        print(username)
        print(password)
        user = authenticate(username=username, password=password)
        print(user)
        if user is None:
            raise serializers.ValidationError('User Not Found')
        return user
Вернуться на верх