首页 > 解决方案 > 没有这样的表:我创建​​另一个超级用户时的solutions_account

问题描述

长话短说,我搞砸了我的迁移并最终删除了它们,但是现在当我创建一个超级用户时,编译器给了我一个错误,说我没有表。我该怎么做才能从一个完全干净的状态开始?

编辑 1 现在我得到一个回溯异常:

python3 manage.py createsuperuser
<django.forms.models.ModelMultipleChoiceField object at 0x10b44ea10>
what is going on
Email: email@gmail.com
Username: whatter
Password: 
Password (again): 
Traceback (most recent call last):
  File "manage.py", line 21, in <module>
    main()
  File "manage.py", line 17, in main
    execute_from_command_line(sys.argv)
  File "/Users/macbook/Library/Python/3.7/lib/python/site-packages/django/core/management/__init__.py", line 381, in execute_from_command_line
    utility.execute()
  File "/Users/macbook/Library/Python/3.7/lib/python/site-packages/django/core/management/__init__.py", line 375, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/Users/macbook/Library/Python/3.7/lib/python/site-packages/django/core/management/base.py", line 323, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/Users/macbook/Library/Python/3.7/lib/python/site-packages/django/contrib/auth/management/commands/createsuperuser.py", line 61, in execute
    return super().execute(*args, **options)
  File "/Users/macbook/Library/Python/3.7/lib/python/site-packages/django/core/management/base.py", line 364, in execute
    output = self.handle(*args, **options)
  File "/Users/macbook/Library/Python/3.7/lib/python/site-packages/django/contrib/auth/management/commands/createsuperuser.py", line 156, in handle
    self.UserModel._default_manager.db_manager(database).create_superuser(**user_data)
TypeError: create_superuser() missing 2 required positional arguments: 'first_name' and 'last_name'

这是我的自定义用户模型,称为 Account:

class MyAccountManager(BaseUserManager):
    def create_user(self, username, first_name, last_name, email, password = None):
        if not username:
            raise ValueError("Users must have a username")
        if not email:
            raise ValueError("Users must have an email")

        user = self.model(
            first_name = first_name,
            last_name = last_name,
            username = username,
            email = self.normalize_email(email),
        )

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

    def create_superuser(self, username, first_name, last_name, email, password):
        user = self.create_user(
            username = username,
            email = self.normalize_email(email),
            first_name = first_name,
            last_name = last_name,
            password = password,
        )
        user.is_admin = True
        user.is_staff = True
        user.is_superuser = True
        user.save(using = self._db)
        return user

    def create_staffuser(self, username, first_name, last_name, email, password):
        user = self.create_user(
            username = username,
            email = self.normalize_email(email),
            first_name = first_name,
            last_name = last_name,
            password = password,
        )
        user.is_admin = False
        user.is_staff = True
        user.is_superuser = False
        user.save(using = self._db)
        return user

class Account(AbstractBaseUser):
    email = models.EmailField(verbose_name = 'email', max_length = 250, unique = True)
    username = models.CharField(max_length = 250, unique = True)
    first_name = models.CharField(max_length = 30)
    last_name = models.CharField(max_length = 30)

    date_joined = models.DateTimeField(verbose_name = 'date joined', auto_now_add = True)
    last_login = models.DateTimeField(verbose_name = 'last login', auto_now_add = True)

    is_active = models.BooleanField(default = True)
    is_admin = models.BooleanField(default = False)
    is_staff = models.BooleanField(default = False)
    is_superuser = models.BooleanField(default = False)

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = ['username',]

    #app_label = 'Account'

    objects = MyAccountManager()

    #class Meta:
        #abstract = True
        #app_label = 'Account'
        #abstract = True

    def __str__(self):
        return self.first_name + " " + self.last_name

    def has_perm(self, perm, obj = None):
        return self.is_admin

    def has_module_perms(self, app_label):
        return True

    def get_url(self):
        return reverse('profile', args = [self.username])

标签: djangodjango-models

解决方案


听起来你是初学者,可能正在使用 SQLite 数据库,只需删除项目文件夹中的 sqlite 文件,然后运行

python manage.py makemigrations

python manage.py migrate

从完全干净的状态开始。

=======================================

您的功能原型可能是错误的

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

first_name如果没有and ,此函数将无法工作last_name,但是当您运行时,这些不是必需的或不需要输入createsuperuser,可以为它们设置默认函数参数,或者覆盖 CLI 以询问 first_namelast_name作为用户输入。

如果您可以更改 create_superuser 函数,请查看github上的此代码,这肯定会奏效。


推荐阅读