Django - create_superuser() 得到了一个意外的关键字参数“user_type”

Posted

技术标签:

【中文标题】Django - create_superuser() 得到了一个意外的关键字参数“user_type”【英文标题】:Django - create_superuser() got an unexpected keyword argument 'user_type' 【发布时间】:2018-05-02 08:50:51 【问题描述】:

我正在尝试为我的 django 应用创建自定义用户模型。 这是 CustomUser 和 CustomUserManager 的代码。

from django.utils.translation import ugettext_lazy as _

class CustomUserManager(BaseUserManager):
def _create_user(self, anonymous, first_name, last_name, email, username, password, home_address, user_type, image_path):
    now = timezone.now()

    if not email:
        raise ValueError('The gives email must be set')

    email = self.normalize_email(email)
    user = self.model(
        anonymous=anonymous,
        first_name=first_name,
        last_name=last_name,
        email=email,
        username=username,
        home_address=home_address,
        user_type=user_type,
        image_path=image_path,
        created_time=now,
        last_login=now
    )

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


    def create_superuser(self, first_name, last_name, email, username, password, home_address, image_path):
    return self._create_user(False, first_name, last_name, email, username, password, home_address, 0, image_path)

class CustomUser(AbstractBaseUser):
    anonymous = models.BooleanField()
    username = models.CharField(max_length=255, unique=True)
    first_name = models.CharField(max_length=255, blank=True)
    last_name = models.CharField(max_length=255, blank=True)
    email = models.EmailField(blank=True, unique=True)
    home_address = models.CharField(max_length=255, blank=True)
    user_type = models.IntegerField(1)
    image_path = models.CharField(max_length=500, blank=True)
    created_time = models.TimeField()

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = ['username', 'home_address', 'first_name', 'last_name', 'user_type']

    objects = CustomUserManager()
    class Meta:
        verbose_name = _('user')
        verbose_name_plural = _('users')

然后我得到关于意外参数 user_type 的错误

Traceback(最近一次通话最后一次):

文件“manage.py”,第 22 行,在 execute_from_command_line(sys.argv)

文件“C:\Users\Nutzer\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\core\management__init__.py”,第 363 行,在 execute_ from_command_line 实用程序.execute()

文件“C:\Users\Nutzer\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\core\management__init__.py”,第 355 行,在执行中 self.fetch_command(subcommand).run_from_argv(self.argv)

文件“C:\Users\Nutzer\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\core\management\base.py”,第 283 行,在 run_from_arg v self.execute(*args, **cmd_options)

文件“C:\Users\Nutzer\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\contrib\auth\management\commands\createsuperuser.py ",第 63 行,在执行中 return super(Command, self).execute(*args, **options)

文件“C:\Users\Nutzer\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\core\management\base.py”,第 330 行,在执行中 输出 = self.handle(*args, **options)

文件“C:\Users\Nutzer\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\contrib\auth\management\commands\createsuperuser.py ",第 183 行,在句柄中 self.UserModel._default_manager.db_manager(database).create_superuser(**user_data)

TypeError: create_superuser() got an unexpected keyword argument 'user_type'

如果有人可以提供帮助,请提前感谢!

【问题讨论】:

您是否在设置中将此自定义模型设置为AUTH_USER_MODEL @schwobaseggl 是的,我做了 AUTH_USER_MODEL = 'CustomUser.CustomUser'。第一个 CustomUser 是一个应用程序 【参考方案1】:

我看不到您曾将自定义管理器分配给自定义模型的位置。这表明它似乎正在查看堆栈跟踪中的默认管理器。尝试将您的自定义管理器分配给模型 as described in the docs。

【讨论】:

嗨@MrName,我很困惑,如果程序试图使用默认的,它如何获取输入user_type?我在 CustomUser 类中有 objects = CustomUserManager(),所以我认为它应该使用 CustomOne 知道了,您能否更新原始帖子中的代码以反映其当前状态?那里粘贴的内容不显示objects = CustomUserManager() 已添加。想隐藏一些不必要的方法但也忘了那行,哈哈 看起来您的create_superuser 函数在方法签名中不包含user_typedef create_superuser(self, first_name, last_name, email, username, password, home_address, image_path):

以上是关于Django - create_superuser() 得到了一个意外的关键字参数“user_type”的主要内容,如果未能解决你的问题,请参考以下文章

Django自带的认证系统

django进阶版4

Django的认证系统

Django认证系统 𕁪

Django认证系统 񗒛

Django-Auth模块