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

Django4.0执行makemigrations报错django_mysql.models无JSONField属性

问题原因

2019年Django官方尚未内置支持JSONField字段,当时的项目普遍依赖django-mysql第三方包提供的JSONField实现,因此对应时期生成的迁移文件中,会固定写入从django_mysql.models导入JSONField的逻辑。
你当前使用的django-mysql 4.7.0版本已经移除了自带的JSONField实现——从Django 3.1版本开始官方已经内置了通用的JSONField,django-mysql从3.0版本起就删除了重复的自有JSONField实现。
Django执行makemigrations等迁移相关命令时,会优先加载项目下所有历史迁移文件,不会因为你当前模型已经改用原生models.JSONField()就跳过旧文件加载,因此错误会在加载旧迁移的阶段触发,和你当前模型层的写法没有关系。

解决步骤
  • 打开报错信息中提示的2019年生成的旧迁移文件,同时全局搜索项目所有app的migrations目录,定位所有包含from django_mysql.models import JSONField导入语句的历史迁移文件。
  • 把上述文件中JSONField的导入源替换为Django原生模块,即把导入语句修改为from django.db.models import JSONField;如果迁移文件中是通过全路径django_mysql.models.JSONField引用字段,直接将路径前缀替换为django.db.models即可。
  • 修改过程中不要改动迁移文件内的字段参数、依赖声明、迁移操作逻辑,仅修正JSONField的引用路径,避免破坏迁移历史一致性,引发后续迁移冲突。
  • 修改完成后重新执行python manage.py makemigrations命令验证,无报错后即可正常执行后续迁移操作。

注意:不要通过删除旧迁移文件的方式规避问题,否则会导致现有数据库的迁移记录不一致,后续在其他环境部署、做数据库结构变更时会出现更难排查的问题。

内容的提问来源于stack exchange,提问作者VikR

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 11:09:12