Python Django:在重写;“用户”;班
我正在用Django3.1做一个Django项目 我试图在Django中重写Python Django:在重写;“用户”;班,python,django,Python,Django,我正在用Django3.1做一个Django项目 我试图在Django中重写User类。这是我在app_questions/models.py中写的: 导入django.contrib.auth.models 从django.contrib.auth.models导入AbstractUser 类用户(抽象用户): #通过 settings.py: 已安装的应用程序=[ “django.contrib.admin”, “django.contrib.auth”, “django.contrib.
User
类。这是我在app_questions/models.py中写的:
导入django.contrib.auth.models
从django.contrib.auth.models导入AbstractUser
类用户(抽象用户):
#通过
settings.py
:
已安装的应用程序=[
“django.contrib.admin”,
“django.contrib.auth”,
“django.contrib.contenttypes”,
“django.contrib.sessions”,
“django.contrib.messages”,
“django.contrib.staticfiles”,
“应用程序问题”,
]
AUTH_USER_MODEL='app_questions.USER'
在我做这些之前,我还创建了一个超级用户
之后,我在cmd中执行了makemigrations
和migrate
,并运行了服务器。我打开管理页面并尝试编辑我之前创建的用户
,但当我单击编辑页面时,出现了以下错误:
OperationalError at /admin/app_questions/user/1/change/
no such table: app_questions_user_groups
Request Method: GET
Request URL: http://127.0.0.1:8000/admin/app_questions/user/1/change/
Django Version: 3.1
Exception Type: OperationalError
Exception Value:
no such table: app_questions_user_groups
Exception Location: C:\Users\*\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\backends\sqlite3\base.py, line 413, in execute
Python Executable: C:\Users\*\AppData\Local\Programs\Python\Python37-32\python.exe
Python Version: 3.7.4
Python Path:
['C:\\Users\\*\\django_sample\\vitural_env\\zeaf',
'C:\\Users\\*\\AppData\\Local\\Programs\\Python\\Python37-32\\python37.zip',
'C:\\Users\\*\\AppData\\Local\\Programs\\Python\\Python37-32\\DLLs',
'C:\\Users\\*\\AppData\\Local\\Programs\\Python\\Python37-32\\lib',
'C:\\Users\\*\\AppData\\Local\\Programs\\Python\\Python37-32',
'C:\\Users\\*\\AppData\\Local\\Programs\\Python\\Python37-32\\lib\\site-packages']
我找到了一些帖子来解决这个问题。以下是我尝试过的方法:
makemigrations
和migrate
(相同错误)migrate(appname)--false
(相同错误)用户
类中(在/admin:中出错,没有此类列
)迁移--sync db
(相同错误)迁移--运行syncdb
(相同错误)$manage.py(appname)零
(失败:未知命令
)migrate--fake(appname)zero
(相同错误)如果这是一篇重复的文章,我们将不胜感激和抱歉。如果我理解正确,您的项目已经在运行,即makemigration不是第一次makemigration。 如果是这样,请尝试删除数据库并再次运行makemigration,可能是在测试开发环境中,只是为了检查问题。如果这项工作(并且应该)成功,你就已经发现了问题。
如果您不想删除数据库,也许您可以不进行覆盖。此错误通常意味着迁移出了问题,并且通常在您事后尝试进行类似更改时发生。一种可能的解决方案是删除所有迁移文件,但以
initial.py
结尾的文件除外。然后再次执行makemigrations
和migrate
,它应该可以工作。当您运行第一个migrate
命令时,所有默认迁移都将生效,这意味着所有表和关系都将被创建
当您自定义默认的用户
(覆盖默认的用户
模型并向验证用户
模型提供值)时,所有关系都将更改
创建数据库表后更改AUTH_USER_模型要困难得多,因为它会影响外键和多对多关系
不建议中途更改用户模型,因为您需要手动修复数据库架构
如果中途更改了用户模型,最简单的解决方法是:删除所有迁移、数据库并运行makemigrations和migrate命令。它创建了一个新的数据库模式
这是一个限制,文件中说:
由于Django对可交换模型的动态依赖特性的限制,AUTH_USER_model引用的模型必须在其应用程序的第一次迁移中创建(通常称为0001_initial);否则,您将有依赖性问题
从文档:
最佳做法是在项目开始时创建自定义用户模型,然后稍后迁移并处理用户模型,以防以后更改与身份验证或用户模型相关的任何内容您在包含用户组的
应用程序中做了什么吗new\u user=user.objects.在views.py中的函数中创建用户(用户名=用户名,电子邮件=邮件,密码=密码,级别=1)
new\u user.save()
;我没有看到任何其他涉及User
对象的东西。这就是你的意思吗?请将已安装的应用程序添加到你的问题中设置的位置。py@OsmanDurdagAdded你确定你指的是noapp_questions/admin.py
中的新用户
模型吗?我记得我以前试过这个,但它不起作用。现在我再试一次,出现了这个错误:django.db.utils.OperationalError:table“django_admin_log”已经存在了
谢谢,它可以工作了。但请您解释一下导致错误的问题是什么?