迁移 admin.0001_initial 在数据库“default”上的依赖项 app.0001_initial 之前应用

Kan*_*ami 8 python django

我正在尝试为我的项目制作定制的用户模型Django

我的模型.py

class myCustomeUser(AbstractUser):
    id = models.AutoField(primary_key=True)
    username = models.CharField(max_length=20, unique="True", blank=False)
    password = models.CharField(max_length=20, blank=False)
    is_Employee = models.BooleanField(default=False)
    is_Inspector = models.BooleanField(default=False)
    is_Industry = models.BooleanField(default=False)
    is_Admin = models.BooleanField(default=False)


class Industry(models.Model):
    user = models.OneToOneField(myCustomeUser, on_delete=models.CASCADE, primary_key=True, related_name='industry_releted_user')
    name = models.CharField(max_length=200, blank=True)
    owner = models.CharField(max_length=200, blank=True)
    license = models.IntegerField(null=True, unique=True)
    industry_extrafield = models.TextField(blank=True)


class Employee(models.Model):
    user = models.OneToOneField(myCustomeUser, on_delete=models.CASCADE, primary_key=True, related_name='employee_releted_user')
    industry = models.OneToOneField(Industry, on_delete=models.CASCADE, related_name='employee_releted_industry')
    i_id = models.IntegerField(null=True, blank=False, unique=True)
    name = models.CharField(max_length=200, blank=False, null=True)
    gmail = models.EmailField(null=True, blank=False, unique=True)
    rank = models.CharField(max_length=20, blank=False, null=True)
    employee_varified = models.BooleanField(default=False)


class Inspector(models.Model):
    user = models.OneToOneField(myCustomeUser, on_delete=models.CASCADE, primary_key=True, related_name='inspector_releted_user')
    inspector_extrafield = models.TextField(blank=True)


class Admin(models.Model):
    user = models.OneToOneField(myCustomeUser, on_delete=models.CASCADE, primary_key=True, related_name='admin_releted_user')
    admin_extrafield = models.TextField(blank=True)
Run Code Online (Sandbox Code Playgroud)

在设置.py中:

AUTH_USER_MODEL = 'app.myCustomeUser'
Run Code Online (Sandbox Code Playgroud)

这里admin.site.register也是在 中完成的admin.pymigrate现在,当我尝试或时,它在终端中显示以下消息makemigrations

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 "G:\Python\lib\site-packages\django\core\management\__init__.py", line 401, in execute_from_command_line   
    utility.execute()
  File "G:\Python\lib\site-packages\django\core\management\__init__.py", line 395, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "G:\Python\lib\site-packages\django\core\management\base.py", line 328, in run_from_argv
    self.execute(*args, **cmd_options)
  File "G:\Python\lib\site-packages\django\core\management\base.py", line 369, in execute
    output = self.handle(*args, **options)
  File "G:\Python\lib\site-packages\django\core\management\base.py", line 83, in wrapped
    res = handle_func(*args, **kwargs)
  File "G:\Python\lib\site-packages\django\core\management\commands\makemigrations.py", line 101, in handle       
    loader.check_consistent_history(connection)
  File "G:\Python\lib\site-packages\django\db\migrations\loader.py", line 295, in check_consistent_history        
    raise InconsistentMigrationHistory(
django.db.migrations.exceptions.InconsistentMigrationHistory: Migration admin.0001_initial is applied before its dependency app.0001_initial on database 'default'.
Run Code Online (Sandbox Code Playgroud)

这是什么意思?而且我也不想在这个模型中设置username&的默认值。还请建议我,这是正确的制作方法吗?passwordmyCustomeUserusermodel

Roe*_*oel 11

如果您在未包含自定义用户模型迁移文件的情况下完成了第一次初始迁移,通常会发生此错误。正如消息所说:

\n
\n

“admin.0001_initial 在数据库 \'default\' 上的依赖项 custom_user_app_label.0001_initial 之前应用”

\n
\n

因为初学者总是会进行初始迁移,然后创建自定义用户。在第一次迁移中,它将迁移所有内置 Django 应用程序,包括admin. 现在有了自定义用户模型,Django 希望它成为要执行的第一个初始迁移。

\n

请参阅 Django 文档在项目中更改为自定义用户模型

\n
\n

由于 Django\xe2\x80\x99s 对可交换模型的动态依赖功能的限制,AUTH_USER_MODEL 引用的模型必须在其应用程序的第一次迁移中创建(通常称为 0001_initial);否则,您\xe2\x80\x99将会遇到依赖性问题。

\n
\n
\n

就我而言,我安装了 Django v4.1。

\n

这就是我重现问题的方式:

\n
    \n
  • 我之前已经迁移过我的应用程序。然后
  • \n
  • 创建了一个自定义User.
  • \n
  • 将应用程序添加到INSTALLED_APPS.
  • \n
  • 创建迁移文件python manage.py makemigrations
  • \n
  • 设置AUTH_USER_MODEL为新的自User定义AUTH_USER_MODEL = \'myapp_label.User\'
  • \n
  • 作为OP遇到迁移错误问题。
  • \n
\n

这就是我解决问题的方法:

\n
    \n
  • 删除数据库但不要删除User初始迁移。

    \n
  • \n
  • 确保在您的0001_initial.py-> 类中Migration.initial设置为True.

    \n
  • \n
  • 运行迁移python manage.py migrate

    \n
  • \n
  • 您的User初始迁移应该是迁移执行顺序中的第一个迁移文件。请参阅此迁移输出作为示例:

    \n
    Running migrations:\n Applying myapp_label.0001_initial... OK\n Applying contenttypes.0001_initial... OK\n Applying admin.0001_initial...\n
    Run Code Online (Sandbox Code Playgroud)\n
  • \n
\n

正如您所看到的,它首先执行,然后是内容类型,然后是管理员。

\n