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

Django ArrayField查询:如何匹配指定数组及筛选仅含指定元素的记录

问题解法

1. 查询tags精确等于[2,1]的记录

PostgreSQL的数组是有序的,直接用精确匹配即可:

# 注意模型中tags是CharField数组,元素需用字符串类型
Post.objects.filter(tags__exact=['2', '1'])

这条查询会返回tags数组顺序和元素完全匹配['2','1']的记录,你的测试数据中没有符合该条件的记录(Post b的tags是['1','2'],顺序不匹配)。

2. 查询tags仅包含'1'和'2'两个元素的记录(不考虑顺序,无其他元素)

需要同时满足「数组包含'1'和'2'」以及「数组所有元素都属于'1'和'2'」两个条件,可通过contains和contained_by组合实现:

Post.objects.filter(
    tags__contains=['1', '2'],
    tags__contained_by=['1', '2']
)

也可以通过排序数组后匹配的方式,规避顺序影响:

from django.db.models import Func, Value

Post.objects.filter(
    tags=Func(Value(['1','2']), function='array_sort')
)

以上查询都会返回Post b(tags为['1','2']),因为它的元素正好是'1'和'2',无额外元素。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 14:30:59