Я новичок в Django. У меня проблема с authenticate (). Это только аутентифицирует суперпользователя. Для любого другого пользователя возвращается None. Я использую поле «user_id» вместо поля «username». Я не хочу использовать Django формы.
это мои 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)
это мои взгляды.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')