1

我创建了自己的用户模型和用户管理器模型。然后我尝试创建一个超级用户并得到“超级用户创建成功”。但是,当我尝试使用所有信息登录时,它失败了。然后我添加了一行代码来在创建时打印我的密码。结果与我的密码匹配。我很确定服务器正在使用自定义模型,因为:

  1. 必填字段根据我的代码更改
  2. 如果我从必填字段中删除一个必填字段,我会收到关于“ TypeError: create_superuser() missing 1 required positional argument:”的错误,这是预期的,所以它是正确的
  3. 我使用 .count() 方法来获取数据库中的用户,并且在创建一个之后我可以看到数量增加了 1

这是我的代码:

class UserManager(BaseUserManager):
    def create_user(self, username,email,password=None):
        if not email:
            raise ValueError("Users must have an email address")
        if not password:
            raise ValueError("Users must have a password")
        user_obj = self.model(
            email=self.normalize_email(email)
        )
        user_obj.set_password(password)
        user_obj.username = username
        user_obj.save(using=self.db)
        return user_obj

    def create_superuser(self, username, email, password):
        print("Super user created, with password" + password)
        return self.create_user(
            username=username,
            email=email,
            password=password,
        )

class User(AbstractBaseUser):
    username = models.CharField(max_length=255, unique=True)
    email = models.EmailField(blank=True, unique=True)
    created_time = models.TimeField(auto_now=True)
    active = models.BooleanField(default=False)

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = ['username']
    objects = UserManager()

如果有人能给我任何想法,我真的很感激。彻底迷路了。

4

2 回答 2

1

我认为你应该改变:

def create_superuser(self, username, email, password):

至:

def create_superuser(self, username, email, password, **extra_fields):
    ....
    return self._create_user(username, email, password, **extra_fields)

因为of**extra_fields函数中_create_user也需要参数of create_user,所以可以在这个源码处checkout 。

def _create_user(self, username, email, password, **extra_fields):
    ....

def create_user(self, username, email=None, password=None, **extra_fields):
    ....
于 2017-11-21T10:12:15.223 回答
0

这种情况的解决方法是设置 is_superuser 和 is_staff 为 True,然后程序将授予该帐户访问 admin 站点的权限

于 2017-11-21T20:59:48.827 回答