Python 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.

我正在用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.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
    (相同错误)
  • 他们都没有解决问题。2016年或2017年的帖子目前似乎不再有效


    如果这是一篇重复的文章,我们将不胜感激和抱歉。

    如果我理解正确,您的项目已经在运行,即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你确定你指的是no
    app_questions/admin.py
    中的新
    用户
    模型吗?我记得我以前试过这个,但它不起作用。现在我再试一次,出现了这个错误:
    django.db.utils.OperationalError:table“django_admin_log”已经存在了
    谢谢,它可以工作了。但请您解释一下导致错误的问题是什么?