You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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,提问作者권민수

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 16:05:25