In the Django documentation for ArrayField,它列出了contains
字段查找。但是,ArrayField中不存在icontains
(不区分大小写的查找 - 许多其他字段都有)查找。
我需要一个不区分大小写的ArrayField查找函数,类似于预先存在的contains
查找。
答案 0 :(得分:4)
您可以使用aa={'a':1,'d':2,'c':3,'b':4}
for key in aa:
print(key)
for key in aa.keys():
print(key)
进行不区分大小写的查找,省略用于icontains
的方括号:
contains
这是有效的,因为Postgres将ArrayField转换为文本,然后检查'my_substring'作为数组文本表示的子字符串。您可以通过检查生成的查询来看到这一点:
queryset = my_model.objects.filter(field_name__icontains='my_substring')
这在Postgres 10.1中对我有用。
答案 1 :(得分:2)
icontains
,iexact
仅适用于字符串类型:
my_array_field__contains=['H']
检查my_array_field中是否[' H'] 包含
但是,如果您尝试以下操作,它将起作用:
my_array_field__0__icontains='H'
因为它检查第一个元素是否包含 H或h
答案 2 :(得分:0)
您可以像这样查询不区分大小写的数组:
select 'tartu' ILIKE ANY (array['Tallinn', 'Tartu','Narva']);
在Django中:
MyModel.objects.extra(
where=['%s ILIKE ANY (array_column_name)'],
params=['tartu', ]
)