当前位置:  开发笔记 > 编程语言 > 正文

使用django对postgres ArrayField进行不区分大小写的搜索

如何解决《使用django对postgresArrayField进行不区分大小写的搜索》经验,为你挑选了1个好方法。

在ArrayField的Django文档中,它列出了一个contains字段查找.但是,icontainsArrayField中不存在(不区分大小写的查找 - 许多其他字段都有)查找.

我需要一个对ArrayField不区分大小写的查找函数,类似于预先存在的contains查找.



1> Stevula..:

您可以使用进行大小写不敏感的查询icontains,方法是省略用于方括号的内容contains

queryset = my_model.objects.filter(field_name__icontains='my_substring')

之所以可行,是因为Postgres将ArrayField转换为文本,然后检查“ my_substring”作为数组文本表示形式的子字符串。您可以通过检查结果查询来查看此内容:

print(queryset.query)

# raw SQL output:
'SELECT ... WHERE UPPER("my_model"."field_name"::text) LIKE UPPER(%my_substring%)

这在Postgres 10.1中为我工作。


作为附录,我应该披露此方法导致了我的项目的错误。假设您要检查数组字段是否包含'my_substring'

field_name__icontains='my_substring'

这将检索'my_substring',但也将检索'foo_my_substring'。这与上面提到的字符串转换有关。使用风险自负。

推荐阅读
yzh148448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有