我遵循了有关如何通过使用电子邮件而不是普通用户名来允许Django身份验证的教程,但是,他们没有提到如何在管理页面中注册新的自定义用户模型!我是Django的真正初学者,所以我将尽可能多地提供详细信息!到目前为止,这是我的代码:
managers.py
from django.contrib.auth.models import BaseUserManager
class CustomUserManager(BaseUserManager):
def create_user(self,email,password=None,**kwargs):
if not email:
raise ValueError('Email field is required')
email = self.normalize_email(email)
user = self.model(email=email,**kwargs)
user.set_password(password)
user.save()
return user
def create_superuser(self,password,**extra_fields):
extra_fields.setdefault('is_staff',True)
extra_fields.setdefault('is_superuser',True)
extra_fields.setdefault('is_active',True)
return self.create_user(email,**extra_fields)
models.py
from django.db import models
from django.contrib.auth.models import AbstractBaseUser
from django.contrib.auth.models import PermissionsMixin
from django.utils.translation import gettext_lazy as _
from .managers import CustomUserManager
class CustomUser(AbstractBaseUser,PermissionsMixin):
email = models.EmailField(unique=True,null=True)
is_staff = models.BooleanField(
_('staff status'),default=False,help_text=_('Designates whether the user can log into this admin site.'),)
is_active = models.BooleanField(
_('active'),default=True,help_text=_(
'Designates whether this user should be treated as active. ''unselect this instead of deleting accounts.'
),)
username_FIELD = 'email'
objects = CustomUserManager()
class Meta:
verbose_name = _('user')
verbose_name_plural = _('users')
def get_full_name(self):
return self.email
def get_short_name(self):
return self.get_full_name()
def __str__(self):
return self.email
admin.py
from django.contrib import admin
# Register your models here.