Docker中Django迁移至宿主机MariaDB时外键约束错误解决
解决Django迁移时django_admin_log外键约束错误
问题根源
错误源于自定义用户模型UserAccount对应的迁移文件未生成/执行,导致admin迁移执行时,django_admin_log表无法找到关联的用户表(或表结构不匹配),触发外键约束异常。同时需确认自定义用户模型的配置是否合规。
解决步骤
1. 验证settings.py核心配置
确保已在settings.py中指定自定义用户模型(假设UserAccount在jsis app下):
AUTH_USER_MODEL = 'jsis.UserAccount'
同时确认该app已加入INSTALLED_APPS:
INSTALLED_APPS = [ # ... 其他默认应用 'jsis', # 自定义用户模型所在的app ]
2. 生成自定义用户模型的迁移文件
进入运行中的Docker容器(替换<container_id>为你的容器ID):
sudo docker exec -it <container_id> bash
在容器内执行命令生成迁移:
python manage.py makemigrations jsis
此命令会为jsis app生成用户模型对应的迁移文件。
3. 按顺序执行迁移
先执行自定义用户模型的迁移,确保用户表优先创建:
python manage.py migrate jsis
再依次执行剩余系统迁移:
python manage.py migrate auth python manage.py migrate admin python manage.py migrate contenttypes sessions sites
4. 可选:调整数据库引擎配置(若仍报错)
如果是MariaDB存储引擎导致的约束问题,在settings.py的数据库配置中添加InnoDB相关参数:
DATABASES = { 'default': { # ... 你的数据库连接信息 'OPTIONS': { 'init_command': "SET sql_mode='STRICT_TRANS_TABLES', innodb_strict_mode=1", }, } }
无需重置整个数据库
只要确保上述步骤执行正确,无需重置所有MariaDB数据库——你已确认当前jsisdb是全新的,按流程操作即可完成迁移。
内容的提问来源于stack exchange,提问作者권민수
相关产品推荐
相关产品推荐

