Django自定义用户模型迁移错误:admin初始迁移依赖问题
问题
构建使用自定义用户模型的Django应用时,创建初始迁移后执行迁移操作出现依赖错误:
django.db.migrations.exceptions.InconsistentMigrationHistory: Migration admin.0001_initial is applied before its dependency users.0001_initial on database 'default'
项目settings/base.py配置如下:
AUTH_USER_MODEL = 'users.User' DJANGO_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', ] THIRD_PARTY_APPS = [ 'rest_framework', 'django_filters', 'corsheaders', 'django_extensions', 'simple_history', 'phonenumber_field', ] LOCAL_APPS = [ 'apps.users.apps.UsersConfig', 'apps.courses.apps.CoursesConfig', 'apps.calendar_app.apps.CalendarAppConfig', ] INSTALLED_APPS = DJANGO_APPS + THIRD_PARTY_APPS + LOCAL_APPS
已尝试执行python manage.py makemigrations users和python manage.py migrate命令,均出现相同错误。需在不删除数据库的情况下解决该问题。
解决方法
这个错误根源是admin应用的迁移已提前执行,而它依赖的自定义用户模型迁移还未运行,导致依赖链断裂。按以下步骤操作即可解决:
备份数据库
操作前务必备份数据库,避免数据丢失。清理迁移历史表
直接操作数据库的django_migrations表,删除admin和auth的已迁移记录:- 打开对应数据库的命令行工具(如PostgreSQL用
psql,MySQL用mysql) - 执行SQL语句:
DELETE FROM django_migrations WHERE app IN ('admin', 'auth');
- 打开对应数据库的命令行工具(如PostgreSQL用
重置用户应用迁移文件
删除apps/users/migrations目录下除__init__.py之外的所有文件,再重新生成用户模型的迁移:python manage.py makemigrations users按依赖顺序执行迁移
先运行用户模型的迁移,再依次执行auth和admin的迁移:python manage.py migrate users python manage.py migrate auth python manage.py migrate admin完成剩余应用迁移
最后执行所有其他应用的迁移:python manage.py migrate
内容的提问来源于stack exchange,提问作者kemosabe
相关产品推荐
相关产品推荐

