django - 没有这样的表:我创建另一个超级用户时的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])
解决方案
听起来你是初学者,可能正在使用 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_name
,last_name
作为用户输入。
如果您可以更改 create_superuser 函数,请查看github上的此代码,这肯定会奏效。
推荐阅读
- react-native - 如何在本机反应中实现时间选择器功能
- python - 使用 Scrapy 在 imdb 中抓取每个单独的电影站点
- javascript - 当没有从我的表中选择记录时,如何在按钮上放置模式。我正在使用引导程序 4
- neo4j - 如何在 Cypher 中使用复杂的嵌套查询
- sql - SQL Server中一个奇怪的操作问题:-100/-100*10 = 0
- python - .iconbitmap 给出 TclError: bitmap "*.ico" not defined
- java - 无法在 Java 项目中使用 JMatI/O 库红色 .mat 文件
- java - 映射@Entity时出现UnsatisfiedDependencyException beancreationerror
- vhdl - 实现开放收集器和“z”数据类型
- ios - 具有不同配置的 iOS TestFlight