无法添加Django超级用户

时间:2014-04-08 15:39:38

标签: django django-authentication

所以我创建了一个AbstractBaseUser,当我去添加一个超级用户时,我收到一个错误:

class MyUser(AbstractBaseUser, PermissionsMixin):

email = models.EmailField(
    verbose_name='email address',
    max_length=255,
    unique=True,
)
donator         = models.DateTimeField()

USERNAME_FIELD  = 'email'   
objects = UserManager()

def __str__(self):
    return self.email

@property
def is_staff(self):
    return self.is_admin

我只关注过教程,所以我不确切知道自己在做什么。我看过这里的无数帖子&文档,似乎没有一个对我有用。我只是不断收到这个错误:

TypeError: create_superuser() takes exactly 4 arguments (3 given)

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

这是我的MyUserManager类,MyUser类现在也指向它。

class MyUserManager(BaseUserManager):
def create_user(self, email, date_of_birth, password=None):
    """
    Creates and saves a User with the given email, date of
    birth and password.
    """
    if not email:
        raise ValueError('Users must have an email address')

    user = self.model(
        email=self.normalize_email(email),
        date_of_birth=date_of_birth,
    )

    user.set_password(password)
    user.save(using=self._db)
    return user

def create_superuser(self, email, date_of_birth, password):
    """
    Creates and saves a superuser with the given email, date of
    birth and password.
    """
    user = self.create_user(email,
        password=password,
        date_of_birth=date_of_birth
    )
    user.is_admin = True
    user.save(using=self._db)
    return UserWarning

我直接从Django文档中删除了这个,所以我不认为这是问题所在,或者是它?

答案 1 :(得分:0)

这个问题确实存在于经理人手中。您已覆盖create_superuser方法以采用其他参数date_of_birth。但Django的createperper命令对此没有任何了解,所以它只传递了正常的三个参数。

查看the code for the command,看起来用户模型的REQUIRED_FIELDS属性中的任何内容都将传递给create_superuser。

确实,看code you are copying,你错过了一条线:

REQUIRED_FIELDS = ['date_of_birth']