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

Django 3.0.5中使用models.JSONField报错AttributeError如何解决?

解决Django 3.0.5中JSONField不存在的问题

错误原因

Django 3.0.x版本的django.db.models中并没有内置JSONField,这个字段是从Django 3.1版本才正式成为内置字段的,所以在3.0.5版本中调用会触发AttributeError。

解决方案

方案一:升级Django到3.1及以上版本

这是最简便的解决方式,直接更新依赖版本:

  1. 修改你的requirements.txt文件,将Django版本改为3.1或更高(选择兼容现有依赖的稳定版本):
Django>=3.1,<4.0
django-cors-headers==3.2.1
djangorestframework==3.11.0
  1. 重新安装依赖:
pip install -r requirements.txt

升级后即可正常使用models.JSONField。

方案二:不升级Django,使用第三方JSON字段库

如果因项目限制无法升级Django,可以使用第三方库django-jsonfield:

  1. 安装该库:
pip install django-jsonfield
  1. 在模型中导入并使用:
from jsonfield import JSONField

class WarehouseTablePreferences(models.Model):
    owner = models.ForeignKey(User, on_delete=models.PROTECT)
    column_preferences = JSONField(default=dict)

方案三:用TextField手动实现JSON序列化(不推荐)

如果不想引入第三方库,也可以用TextField结合JSON序列化模拟:

import json
from django.db import models
from django.core.exceptions import ValidationError

def validate_json(value):
    try:
        json.dumps(value)
    except TypeError:
        raise ValidationError("Invalid JSON format")

class WarehouseTablePreferences(models.Model):
    owner = models.ForeignKey(User, on_delete=models.PROTECT)
    column_preferences = models.TextField(default='{}', validators=[validate_json])

    @property
    def column_preferences_dict(self):
        return json.loads(self.column_preferences)

    @column_preferences_dict.setter
    def column_preferences_dict(self, value):
        self.column_preferences = json.dumps(value)

这种方式需要手动处理序列化和反序列化,便捷性不如前两种方案,仅作为临时替代。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 07:54:58