Django Custom Auth Model无法从管理员门户登录

时间:2016-06-02 13:11:11

标签: python django django-admin

我为Django的auth app创建了自定义用户个人资料模型,以及我无法使用Django Admin登录表单登录的问题。

注意:用户is_superuser=1is_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()

保存userprofile

截图: enter image description here

3 个答案:

答案 0 :(得分:0)

如果用户不是员工,则无法使用管理员登录(因为错误是sais)。 如果你想要一个内置的登录页面,你可以使用/accounts/login这是settings.LOGIN_URL的默认值

答案 1 :(得分:0)

在定义没有username字段的自定义用户时,我遇到了类似的问题。设置is_adminis_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):
相关问题