Django加载Fixture失败求助:DeserializationError及字段不存在错误
Django 3.2 Docker部署REST API启动错误解决
1. 先处理JSON布尔值导致的DeserializationError
你已经定位到问题是emoji-groups.json里的大写True/False不符合JSON规范,改成小写true/false即可。注意要检查整个文件,确保所有布尔值都完成替换,避免遗漏个别条目导致后续仍报错。
2. 解决KeyError/FieldDoesNotExist(EmojiGroup无keyword_sv等多语言字段)
这个问题核心是序列化文件的字段与当前EmojiGroup模型定义不匹配,结合你的Docker部署场景,按以下步骤排查:
排查方向1:模型字段是否变更
- 检查项目中
EmojiGroup模型代码:确认是否曾经存在keyword_sv等多语言字段,现在被删除或注释。如果是,直接编辑emoji-groups.json,将所有包含keyword_sv、keyword_xx这类不存在的字段条目删除。 - 如果使用了
django-modeltranslation或类似多语言字段库:- 确认
settings.py中已正确配置该库(比如INSTALLED_APPS包含modeltranslation,添加了对应的中间件,配置了LANGUAGES列表)。 - 检查容器环境中是否安装了该库的依赖,避免构建镜像时遗漏依赖包。
- 确认
排查方向2:序列化文件与模型版本不一致
- 重新生成序列化文件:在本地或容器内执行
python manage.py dumpdata your_app.EmojiGroup --indent 2 > emoji-groups.json,用新生成的文件替换旧文件,确保字段与当前模型完全匹配。 - 检查Docker镜像/挂载卷:确认部署时使用的
emoji-groups.json是最新版本,避免挂载了本地旧文件或镜像中打包了过时的序列化文件。
排查方向3:数据库迁移未同步
- 检查容器启动脚本:确保在启动Web服务前执行了
python manage.py migrate命令,保证数据库表结构与当前模型定义一致。如果是Docker Compose部署,可在command中添加迁移步骤,比如:command: sh -c "python manage.py migrate && python manage.py runserver 0.0.0.0:8000"
排查方向4:环境配置差异
- 确认容器内的环境变量与之前正常运行的环境一致:比如多语言字段的生成依赖特定环境变量(如
ENABLED_LANGUAGES),如果容器中缺失该配置,会导致动态生成的多语言字段未加载。
内容的提问来源于stack exchange,提问作者Ananth
相关产品推荐
相关产品推荐

