我试图使定制的用户模型为我的项目在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)
在设置.py中:
AUTH_USER_MODEL = 'app.myCustomeUser'
这里admin.site.register
也是在admin.py
中完成的,现在我尝试migrate
或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'.
这是什么意思?我也不想在这个myCustomeUser
模型中设置username
和password
的默认值。另外请建议我,这是制作usermodel
的正确方法吗?
2条答案
按热度按时间llycmphe1#
我也遇到了同样的问题,但我只是从每个应用程序中删除了我的迁移,删除了数据库,并创建了一个新的。
一个月一个月一个月一个月一个月
进行新的迁移,一切正常。
aelbi1ox2#
如果您在没有包含自定义用户模型迁移文件的情况下完成了第一次初始迁移,通常会发生此错误。
“admin.0001_initial在其依赖项custom_user_app_label.0001_initial之前应用于数据库'default'”
因为初学者总是先做初始迁移,然后创建一个自定义用户。在第一次迁移中,它将迁移所有内置的Django应用程序,包括
admin
。现在有了自定义用户模型,Django希望它是第一次执行的初始迁移。请参见Django docs在项目中期更改为自定义用户模型。
由于Django对可交换模型的动态依赖特性的限制,AUTH_USER_MODEL引用的模型必须在其应用的第一次迁移中创建(通常称为0001_initial);否则,你会有依赖性问题。
在我的例子中,我安装了Django v4.1。
以下是我重现问题的方式:
User
。INSTALLED_APPS
中。python manage.py makemigrations
AUTH_USER_MODEL = 'myapp_label.User'
将AUTH_USER_MODEL
设置为新的自定义User
以下是我解决问题的方法:
User
初始迁移。0001_initial.py
-〉类中Migration.initial
设置为True
。python manage.py migrate
User
初始迁移应是迁移执行顺序中的第一个迁移文件。请参阅此迁移输出示例:正如您所看到的,它首先执行,然后是contenttypes,最后是admin。