Django新增Airport模型后保存提示无对应表、迁移执行失败问题求助
问题根因
你出现该报错是因为先创建了带origin字段的Flight模型并写入了数据,后续修改模型将origin改为关联Airport的外键,且未清理旧数据库残留数据和无效迁移文件就尝试新增Airport模型,最终形成迁移冲突:数据库中无Airport对应表,同时旧Flight表的非法外键值又阻塞了新迁移执行。
修复步骤
- 第一步:清理冲突残留
- 删除项目根目录下的
db.sqlite3数据库文件,学习阶段无重要业务数据可直接删除 - 进入flights应用的
migrations文件夹,删除该目录下除__init__.py之外的所有文件,不要删除__init__.py本身
- 删除项目根目录下的
- 第二步:重新生成迁移
执行指定应用的迁移生成命令,避免Django未检测到模型变更:python manage.py makemigrations flights
执行完成后打开新生成的迁移文件,确认内容包含Airport模型的创建逻辑、Flight模型外键关联Airport的逻辑,无异常后进入下一步 - 第三步:执行迁移
执行全量迁移命令,此时是全新数据库无旧数据冲突,不会报错:python manage.py migrate - 第四步:功能验证
进入Django shell执行你之前的测试代码即可正常运行:from flights.models import Airport f = Airport(code="NY", city="New York") f.save() # 验证数据是否成功写入 print(Airport.objects.all())
内容的提问来源于stack exchange,提问作者Vicent LHK ROT
相关产品推荐
相关产品推荐

