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

时间:2015-12-28 02:29:58

标签: python django database postgresql

In the Django documentation for ArrayField,它列出了contains字段查找。但是,ArrayField中不存在icontains(不区分大小写的查找 - 许多其他字段都有)查找。

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

3 个答案:

答案 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)

icontainsiexact仅适用于字符串类型:

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', ]
)