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

Celery存储数据到Django JSONField时触发JSONField导入错误如何解决

错误原因

  • 你的Django版本低于3.1:Django官方原生跨数据库兼容的JSONField是3.1版本才正式纳入django.db.models模块的,低于该版本的Django环境中无法从这个路径导入该字段。
  • 如果你当前使用的是Django 2.2~3.0版本,且数据库为PostgreSQL,旧版本专属的PostgreSQL-only JSONField存放在django.contrib.postgres.fields路径下,你当前的导入路径不对。

解决方案

方案1:升级Django到3.1及以上版本(推荐)

直接升级Django到稳定的高版本即可解决导入问题,同时可以使用兼容所有主流数据库(MySQL、PostgreSQL、SQLite等)的原生JSONField:

pip install --upgrade django>=3.2  # 建议升级到LTS版本3.2或者更高的稳定版

升级后你原来的导入语句无需修改即可正常运行。

方案2:适配低版本Django

如果你暂时无法升级Django,根据你使用的数据库选择对应方案:

  • 若使用PostgreSQL数据库:修改models.py中的导入语句,把JSONField的导入路径替换为PostgreSQL专属路径:
# 把原来的from django.db.models import TextField, JSONField, Model替换为下面的
from django.db.models import TextField, Model
from django.contrib.postgres.fields import JSONField
  • 若使用非PostgreSQL数据库(如MySQL、SQLite等):可以引入第三方包django-jsonfield来实现相同功能:
    先安装依赖:
pip install django-jsonfield

再修改导入语句:

from django.db.models import TextField, Model
from jsonfield import JSONField

额外代码问题修正

你提供的tasks.py代码里还有两处明显错误需要修正:

  1. 没有定义变量id就直接调用str(id),会抛出未定义异常,需要替换为你实际的业务id变量
  2. res.append(content)中的res变量没有定义,直接运行会报错,建议删掉这行没用的代码,或者替换为你实际要操作的列表变量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 08:36:02