0

I am new in Django. I have a problem with authenticate(). It only authenticates the superuser. For any other user it returns None. I use "user_id" field instead of "username" field. I don't want to use Django forms.

this is my models.py.

models.py

class UserProfileManager(BaseUserManager):

    def create_user(self, user_id, first_name, last_name, user_class, password = None):

        user = self.model(first_name = first_name, last_name = last_name , user_id = user_id, user_class = user_class)
        user.set_password(password)
        user.save(using = self._db)

        return user

    def create_superuser(self, user_id, first_name, last_name , password = None):

        user = self.create_user(user_id, first_name, last_name, None, password = password)
        user.is_superuser = True
        user.is_staff = True
        user.save(using = self._db)
        return user

class UserProfile(AbstractBaseUser, PermissionsMixin):
    first_name = models.CharField(max_length = 255)
    last_name = models.CharField(max_length = 255)
    user_id = models.IntegerField(unique = True, null = True)
    user_class = models.ForeignKey(Class, on_delete = models.PROTECT, default = None, unique = False, null = True)
    is_active = models.BooleanField(default = True)
    is_staff = models.BooleanField( default = False)

    objects = UserProfileManager()

    USERNAME_FIELD = 'user_id'
    # REQUIRED_FIELDS = ['first_name', 'last_name']

    def get_short_name(self):
        return self.first_name

    def get_full_name(self):
        return '{} {}'.format(self.first_name, self.last_name)

    def __str__(self):
        return '{} {}'.format(self.first_name, self.last_name)

this is my views.py.

views.py

class HomeView(TemplateView):
    template_name = 'user_profile/home.html'

    def post(self, request, *args, **kwargs):
        if request.method == 'POST':
            user_id = request.POST.get('user_id')
            password = request.POST.get('password')
            print('id :', user_id, '\npassword : ',password)
            user = authenticate(user_id = user_id , password = password)
            print(user)
            if user is not None :
                if user.is_active:
                    login(request,user)
                    return redirect('user_profile:home')
                else:
                    return render(request, 'user_profile/not_active.html')
            else:
                return render(request, 'user_profile/not_valid.html')

        else:

            return render(request, 'user_profile/home.html')
behnam.m
  • 41
  • 5

1 Answers1

0

because the users are not active. And username_field puts the email or username or another unique field except id