gpt4 book ai didi

Django ArrayField 过滤包含匹配

转载 作者:行者123 更新时间:2023-12-04 01:36:31 24 4
gpt4 key购买 nike

我正在使用 Django Postgres ArrayField

response_headers = ArrayField(models.TextField(blank=True),blank=True,null=True,default=list)

假设我们的对象有以下数据:
obj1 : response_headers = ["dubai","sydney","nyc"]
obj2 : response_headers = ["mumbai","kerela","dubai"]
MyModel.objects.filter(response_headers__contains=['dubai']

会返回 obj1 & obj2
MyModel.objects.filter(response_headers__contains=['duba']
or
MyModel.objects.filter(response_headers__contains=['uba']

不会返回任何对象 <QuerySet []>
如何实现在 ArrayField 的所有索引中使用部分模式进行搜索的能力?

最佳答案

是的,只有精确的元素匹配是可能的。

MyModel.objects.filter(response_headers__contains=['duba'])


将使用 postgresql 执行精确匹配搜索包含 @>运算符(operator)。

但是,如果 ArrayField 仅包含简单字符串,则存在一个可能适用的 hacky 选项:
MyModel.objects.filter(response_headers__icontains='duba')

这将投 ArrayField文本,大写并执行 LIKE '%DUBA%' .

因此,它不检查数组中是否有任何元素 (i) 像 'duba',而是将数组转换为一个字符串(如果元素不是简单的字符串 - 结果可能不理想) - 即 {dubai,sydney,nyc}然后与参数 duba 执行不区分大小写的匹配.

关于Django ArrayField 过滤包含匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59321017/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com