我正在关注Django(Django Unleashed)的教程书,我认为在使用较新版本的Django时代码存在问题(我已经在亚马逊上阅读过这个问题的问题) )。因此,对于本书的未来学生,我会公开地询问这本书。
为了创建自定义用户模型,本书建议用户模型没有用户名'领域。在makemigrations
:
django.core.exceptions.FieldError: Unknown field(s) (username) specified for User
StackOverflow上还有其他关于此错误的主题,他们建议django.contrib.auth.admin.UserAdmin
需要'用户名'指定并因此建议将名为add_fieldsets
的属性添加到继承表单UserAdmin
的类中。我的问题(所以我不必在本书的代码中遇到其他问题)...是否可以创建自定义用户配置文件而无需指定用户名和没有管理员类?到目前为止,这是我的代码:
用户模型
class User(AbstractBaseUser, PermissionsMixin):
email = models.EmailField('email adress', max_length=254, unique=True)
is_staff = models.BooleanField('staff status', default=False)
is_active = models.BooleanField('active', default=False)
name = models.CharField(max_length=255)
joined = models.DateTimeField("Date Joined", auto_now_add=True)
USERNAME_FIELD = 'email'
objects = UserManager()
def __str__(self):
return self.email
def get_absolute_url(self):
return self.profile.get_absolute_url()
def get_full_name(self):
return self.name
def get_short_name(self):
return self.profile.name
的UserManager
class UserManager(BaseUserManager):
use_in_migrations = True
def _create_user(
self, email, password, **kwargs):
email = self.normalize_email(email)
is_staff = kwargs.pop('is_staff', False)
is_superuser = kwargs.pop(
'is_superuser', False)
user = self.model(
email=email,
is_active=True,
is_staff=is_staff,
is_superuser=is_superuser,
**kwargs)
user.set_password(password)
user.save(using=self._db)
return user
def create_user(
self, email, password=None,
**extra_fields):
return self._create_user(
email, password, **extra_fields)
def create_superuser(
self, email, password,
**extra_fields):
return self._create_user(
email, password,
is_staff=True, is_superuser=True,
**extra_fields)
我想在没有错误的情况下执行makemigrations
答案 0 :(得分:0)
我认为您需要使用AbstractUser
而不是AbstractBaseUser
class User(AbstractUser, PermissionsMixin):
或需要为您的模型声明username
,例如:
username = models.CharField(_('username'), max_length=30, unique=True)