我为Django的auth app创建了自定义用户个人资料模型,以及我无法使用Django Admin登录表单登录的问题。
注意:用户is_superuser=1
和is_staff=1
models.py
=======================
class UserProfile(AbstractUser):
gender = models.IntegerField(choices=GENDER_CHOICES, verbose_name='Gender', default=1)
civil_id = models.CharField(max_length=12, verbose_name='Civil ID')
tel_num = models.CharField(max_length=18, blank=True, verbose_name='Telephone Number')
mob_num = models.CharField(max_length=18, verbose_name='Mobile Number')
dob = models.DateField(verbose_name='Date of birth', null=True)
country = models.ForeignKey(Country, verbose_name='Country', null=True)
province = models.ForeignKey(Province, verbose_name='Province', null=True)
area = models.ForeignKey(Area, verbose_name='Area', null=True)
address = models.CharField(max_length=100)
profile_image = models.ImageField(upload_to=user_directory_path, verbose_name='Profile Image', default='')
secondary_email = models.EmailField(verbose_name='Secondary Email',
help_text='This email address will be used in case of account recovery',
blank=True)
is_verified = models.BooleanField(verbose_name='Verified', default=False)
verification_request = models.CharField(max_length=25, default=generate_verification_code)
is_in_smart_launch = models.BooleanField(default=False, verbose_name='Is profile created in smartlaunch')
branch = models.ForeignKey(Branch, related_name='users', null=True)
并使用set_password()
答案 0 :(得分:0)
如果用户不是员工,则无法使用管理员登录(因为错误是sais)。
如果你想要一个内置的登录页面,你可以使用/accounts/login
这是settings.LOGIN_URL
的默认值
答案 1 :(得分:0)
在定义没有username
字段的自定义用户时,我遇到了类似的问题。设置is_admin
和is_staff
字段后,管理员登录页面再次工作。我的代码如下所示
class MyUser(AbstractBaseUser, PermissionsMixin):
"""
A custom class for user authentication. It gets rid of
'username' and uses 'email' for that purpose.
"""
email = models.EmailField(
max_length=64,
unique=True)
is_active = models.BooleanField(default=True,)
is_staff = models.BooleanField(default=False)
is_admin = models.BooleanField(default=False)
objects = MyUserManager()
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = []
def __str__(self):
return self.email
# more code below omitted
答案 2 :(得分:0)
from this post django looks up the model prop for is_superuser, is_active and is_staff
active = models.BooleanField(default=True)
staff = models.BooleanField(default=True)
superuser = models.BooleanField(default=True)
@property
def is_superuser(self):
return self.superuser
@property
def is_active(self):
return self.active
@property
def is_staff(self):