Django ORM 中过滤 JSON 数据

简介

首先,我们假设您有一个名为 MyModel 的 Django 模型,它包含一个 JSONField 类型的字段,名为 data。这个 data 字段可以存储各种 JSON 格式的数据。

过滤 JSON 字段中的键值对

您可以使用双下划线 __ 语法来访问 JSON 字段中的嵌套键值对。例如:

python 复制代码
# 过滤 data 字段中 "name" 键对应的值为 "John"
results = MyModel.objects.filter(data__name="John")

# 过滤 data 字段中 "address" 键下的 "city" 键对应的值为 "New York"
results = MyModel.objects.filter(data__address__city="New York")

过滤 JSON 数组

如果 JSON 字段中包含数组,您可以使用 contains lookup 来过滤数组中的元素:

python 复制代码
# 过滤 data 字段中 "tags" 键对应的数组包含 "python"
results = MyModel.objects.filter(data__tags__contains="python")

使用 has_key 过滤存在特定键的 JSON 字段

您可以使用 has_key lookup 来检查 JSON 字段中是否存在特定的键:

python 复制代码
# 过滤 data 字段中包含 "email" 键的记录
results = MyModel.objects.filter(data__has_key="email")

使用 JSONField 的 contains lookup 进行模糊搜索:

JSONField 提供了 contains lookup,您可以使用它来进行模糊搜索:

python 复制代码
# 模糊搜索 data 字段中 "name" 键对应的值包含 "Jo"
results = MyModel.objects.filter(data__name__contains="Jo")

使用 Q 对象进行复杂查询

您还可以使用 Django ORM 的 Q 对象来构建更复杂的查询:

python 复制代码
from django.db.models import Q

# 过滤 data 字段中 "name" 键对应的值为 "John",或 "tags" 键对应的数组包含 "python"
results = MyModel.objects.filter(Q(data__name="John") | Q(data__tags__contains="python"))

需要注意的是,不同的数据库可能会有不同的 JSON 查询语法,您需要查看所使用数据库的文档,确保正确使用。此外,如果您使用的是 PostgreSQL 数据库,您还可以利用其内置的 JSON 函数进行查询。

相关推荐
MZ_ZXD0019 小时前
springboot旅游信息管理系统-计算机毕业设计源码21675
java·c++·vue.js·spring boot·python·django·php
wqq631085513 小时前
Python基于Vue的实验室管理系统 django flask pycharm
vue.js·python·django
Q_Q196328847513 小时前
python大学生爱心校园互助代购网站_nyvlx_django Flask vue pycharm项目
python·django·flask
ggabb15 小时前
中国文化速记清单.地名与母亲河.文化名人与经典
sqlite
CSCN新手听安18 小时前
【linux】网络基础(三)TCP服务端网络版本计算器的优化,Json的使用,服务器守护进程化daemon,重谈OSI七层模型
linux·服务器·网络·c++·tcp/ip·json
wxin_VXbishe19 小时前
C#(asp.net)学员竞赛信息管理系统-计算机毕业设计源码28790
java·vue.js·spring boot·spring·django·c#·php
码界筑梦坊19 小时前
330-基于Python的社交媒体舆情监控系统
python·mysql·信息可视化·数据分析·django·毕业设计·echarts
bloglin9999919 小时前
Qwen3-32B报错Invalid json output:{“type“: “1“}For troubleshooting, visit
llm·json
Trouvaille ~20 小时前
【Linux】应用层协议设计实战(二):Jsoncpp序列化与完整实现
linux·运维·服务器·网络·c++·json·应用层
码界筑梦坊21 小时前
325-基于Python的校园卡消费行为数据可视化分析系统
开发语言·python·信息可视化·django·毕业设计