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

如何在Django查询中对字典类型字段执行过滤操作?

Django 嵌套JSON字段查询正确实现方案

你原本的写法不符合Django ORM的查询参数语法规则,filter方法的参数名不能直接使用Python字典取值的方括号语法,需要使用Django专门针对JSON字段设计的查询语法。

核心实现(适用于Django 3.1及以上版本)

Django内置JSONField支持通过双下划线__拼接JSON嵌套键的路径实现精确查询,正确写法如下:

A = User.objects.filter(country__Europe__South='Italy')

该语法对PostgreSQL、MySQL 5.7+、SQLite 3.38.0+等主流数据库均生效。

特殊场景适配

如果JSON的键名本身包含双下划线,可通过KeyTransform类指定精确键名实现查询:

from django.db.models import F
from django.db.models.fields.json import KeyTransform

A = User.objects.annotate(
    south_region = KeyTransform('South', KeyTransform('Europe', F('country')))
).filter(south_region='Italy')

排查技巧

可通过打印查询集对应的SQL语句,快速校验查询逻辑是否符合预期:

print(A.query)

注意事项

  • 查询时使用的键名需要和数据库中存储的JSON键名大小写完全匹配,比如存储的键为小写europe,则需要调整写法为country__europe__south
  • 如果你使用的是Django 3.1以下版本,需先安装第三方django-jsonfield包,查询语法和上述写法一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 04:09:01