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

如何在Django中查询category字段值属于指定嵌套列表的记录?

解决方案:Django JSONField 匹配嵌套列表中的子列表

你的需求是查询category字段(JSONField类型,存储列表值)恰好等于过滤嵌套列表中某一个子列表的记录,以下是可行的实现方式:

问题说明

你尝试的category__in写法在部分数据库(如MySQL)中可能无法正确生效,因为不同数据库对JSON类型的IN查询支持存在差异,无法精确匹配整个列表结构。

可靠实现方式

使用Q对象构建多条件OR查询,逐个匹配过滤列表中的每个子列表,这种方式兼容性更强,适配所有支持Django JSONField的数据库:

1. 模型定义(修正正确写法)

from django.db import models

class Table(models.Model):
    category = models.JSONField()

2. 查询代码实现

from django.db.models import Q

# 你的过滤嵌套列表
filter_categories = [['3aa', '1ss', '2bb'], ['4aa', '5bb'], ['3nn', '9mm', '6cc']]

# 构建OR查询条件
query_condition = Q()
for cat_list in filter_categories:
    query_condition |= Q(category=cat_list)

# 执行查询
matched_records = Table.objects.filter(query_condition)

原理说明

  • 每个Q(category=cat_list)会生成一个精确匹配整个列表的查询条件
  • 通过|运算符将所有条件拼接为OR逻辑,最终获取所有category等于过滤列表中任意子列表的记录

可选方案(仅PostgreSQL适用)

如果你使用PostgreSQL数据库,Django对JSONField的支持更完善,直接使用你最初的写法也能生效:

matched_records = Table.objects.filter(category__in=filter_categories)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 19:20:11