在ArrayField的Django文档中,它列出了一个contains
字段查找.但是,icontains
ArrayField中不存在(不区分大小写的查找 - 许多其他字段都有)查找.
我需要一个对ArrayField不区分大小写的查找函数,类似于预先存在的contains
查找.
您可以使用进行大小写不敏感的查询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'
。这与上面提到的字符串转换有关。使用风险自负。