Невозможно войти в систему обычному пользователю на сайте django с пользовательской моделью пользователя

Я создал пользовательскую модель пользователя для своего сайта. Я использовал AbstractBaseUser для создания модели, а также установил ее в настройках. Создание пользователя и суперпользователя работает нормально без каких-либо проблем, а также суперпользователь может войти в систему со страницы администратора. Однако когда я пытаюсь создать обычного пользователя для входа на сайт, возвращается сообщение User none. Но обычный пользователь существует в базе данных. Я использую authenticate, чтобы заставить пользователя войти в систему, так как я использовал AbstractBaseUser. Я не могу понять, почему это говорит, что пользователь не существует. Пожалуйста, поправьте меня, если я написал неправильные коды.

models.py (пользовательская модель пользователя), здесь is_active is false, но я вручную активирую ее после regd, так что проблема не из-за этого


class CustomUser(AbstractBaseUser, PermissionsMixin):
    
    email = models.EmailField( unique= True)
    full_name = models.CharField(max_length=255)
    phone_no = models.CharField(max_length=10, blank= True)
    address = models.CharField(max_length=500, blank= True)
    plan = models.CharField(max_length=255, blank= True)
    age = models.CharField(max_length=2, blank= True)

    date_joined = models.DateTimeField(default=timezone.now)




    is_staff = models.BooleanField( default=False)
    is_active = models.BooleanField( default=False)

    objects = CustomUserManager()


    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = ['full_name']


    def __str__(self):
        return self.email

managers.py (менеджер пользовательской модели пользователя)

class CustomUserManager(BaseUserManager):

    # CUSTOM USER MODEL FOR USER WHERE EMAIL IS THE USERNAME FOR AUTHENTICATION RATHER THEN USERNAME

    
    
    def create_superuser(self, email, full_name, password, **other_fields):

    # CREATE AND SAVE SUPERUSER WITH THE GIVEN EMAIL AND PASSWORD

        other_fields.setdefault('is_staff', True)
        other_fields.setdefault('is_superuser', True)
        other_fields.setdefault('is_active', True)

        if other_fields.get('is_staff') is not True:
            raise ValueError(_('is staff must be set to true'))
        
        if other_fields.get('is_superuser') is not True:
            raise ValueError(_('is superuser must be set to true'))
        
        return self.create_user(email, full_name, password, **other_fields)

    
    def create_user(self, email,full_name, password, **other_fields):

    # CREATE AND SAVE USER WITH THE GIVEN EMAIL AND PASSWORD

        if not email:
            raise ValueError(_('The Email must be set'))
        
        email = self.normalize_email(email)
        user = self.model(email=email, full_name=full_name,**other_fields)
        user.set_password(password)
        user.save()
        return user

settings.py

AUTH_USER_MODEL = 'account.CustomUser'

views.py (функция, передающая логин)

def loginpage(request):

    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('paswword')

        # user = CustomUser.objects.get(email=username, password=password)
        
        user = authenticate(request, email=username, password=password)

        if user is not None:
            login(request, user)
            return redirect(user_page) # this is in home views
        else:
            return HttpResponse(' User doesnt exist')               #FOR ERROR PURPOSE

    else:
        return render(request, 'login.html')



def t_and_c(request):
    return render(request, 'terms_and_condition.html')

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

У вас возникла эта ошибка, потому что вы никогда не activate пользователя (is_active=False) по умолчанию в CustomUser модели.

Я также вижу, что у вас нет представления для активации нового пользователя. Тогда вам нужно активировать пользователя при создании (registerpage) :

def registerpage(request):
    # Lot of code
    if password1==password2:
        user=CustomUser.objects.create_user(...)

        # You don't need to call save, as create_user do it already
        # user.save()

        # Now active the user
        user.is_active = True
        user.save()  # Here save() is necessary
       

Больше о Django User Model

ОБНОВИТЬ :

В вашем пользовательском менеджере вы установили USERNAME_FIELD = 'email'. Это означает, что для входа в систему вам необходимо указать email и password.

def loginpage(request):

    if request.method == 'POST':
        email = request.POST.get('email')
        password = request.POST.get('paswword')
        
        # Use eamail to authenticate instead of username
        user = authenticate(request, email=email, password=password)
Вернуться на верх