Я создал пользовательскую модель пользователя, а затем создал пользователя, используя python manage.py createuperuser, и тот же пользователь может войти на сайт администратора. Затем я использовал ту же модель для регистрации другого пользователя, использующего страницу HTML регистрации , и объект пользователя создается в db с пользователем в качестве персонала и active = True, который работает, как и ожидалосьТем не менее, при входе через логин администратора и пользовательскую страницу входа он возвращает объект пользователя = Нет и отображает приведенную ниже ошибку.
Пожалуйста, введите правильный телефон и пароль дляличный кабинет. Обратите внимание, что оба поля могут быть регистрозависимыми.
Примечание: формы django не используются.
models.py
from django.db import models
from django.contrib.auth.models import AbstractBaseUser, BaseUserManager, PermissionsMixin
class UserManager(BaseUserManager):
def create_user(self, phone, password=None, is_active=True, is_staff=True, is_admin=False):
if not phone:
raise ValueError("Users must have a valid phone number")
if not password:
raise ValueError("Users must have a password")
user = self.model(phone=phone)
user.set_password(password)
user.active = is_active
user.staff = is_staff
user.admin = is_admin
user.save(using=self._db)
return user
def create_staffuser(self, phone, password=None):
user = self.create_user(
phone,
password=password,
is_staff=True
)
return user
def create_superuser(self, phone, password=None):
user = self.create_user(
phone,
password=password,
is_staff=True,
is_admin=True
)
return user
class MyUser(AbstractBaseUser, PermissionsMixin):
phone = models.CharField(primary_key=True, max_length=12, unique=True)
email = models.EmailField()
date_joined = models.DateTimeField(auto_now_add=True)
active = models.BooleanField(default=True)
staff = models.BooleanField(default=False)
admin = models.BooleanField(default=False)
USERNAME_FIELD = 'phone'
REQUIRED_FIELDS = []
objects = UserManager()
def __str__(self):
return self.phone
@property
def is_staff(self):
return self.staff
@property
def is_admin(self):
return self.admin
@property
def is_active(self):
return self.active
@property
def is_superuser(self):
return self.is_admin
views.py
def mock(request):
if request.method == "POST":
phone = request.POST['phone']
print("User Join", phone)
password = request.POST['password']
password = make_password(password)
user = Users.objects.create_user(phone=phone, password=password)
user.save()
print(request.user)
return render(request, "user/register.html")
else: