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

Django ORM如何筛选JSONField嵌套数组中EmailAddress对应的value值

Django ORM过滤JSON数组字段的实现方法

结论

该需求完全可以通过Django ORM原生功能实现,不需要额外编写原生SQL。

实现代码

# 过滤目标:邮箱为指定值的MyModel记录
target_email = "michael@hiyield.co.uk"

# 过滤语句
queryset = MyModel.objects.filter(
    about__contains=[{"name": "EmailAddress", "value": target_email}]
)

原理解释

  • Django 3.1及以上版本对JSONField提供了原生的包含查询(contains)支持,针对数组类型的JSON值,contains查询会校验数组中是否至少存在一个元素完全匹配传入的结构
  • 上述代码中传入的[{"name": "EmailAddress", "value": target_email}]会被Django解析为:查询about数组是否包含一个对象,该对象的name属性值为EmailAddress,且value属性值为指定的目标邮箱,和需求完全匹配
  • 该方法不依赖EmailAddress元素在数组中的固定位置,无论它在数组的第几顺位都可以被正确匹配

注意事项

  • 该语法仅适用于Django 3.1及以上版本,更低版本的Django如果使用PostgreSQL作为数据库,可替换使用django.contrib.postgres.fields.JSONField,用法完全一致
  • 若数据量较大,可给about字段创建GIN索引大幅提升该类JSON查询的性能(仅PostgreSQL支持)

内容的提问来源于stack exchange,提问作者Micheal J. Roberts

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 20:36:03