且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

Django查询不区分大小写的列表匹配

更新时间:2022-10-14 20:42:37

Unfortunatley有 __ iin 字段查找。但是有一个 iregex 可能是有用的,像这样:

  result = Name.objects.filter(name__iregex = r' (name1 | name2 | name3)')

甚至:

  a = ['name1','name2','name3'] 
result = Name.objects.filter(name__iregex = r'('+' |'.join(a)+')')

请注意,如果一个可以包含特别是正则表达式,您需要正确逃离他们。 / p>

新闻:在Djano 1.7中,可以创建自己的查找,所以你可以实际使用 filter(name__iin = ['name1','name2 ','name3'])。请参阅 https://docs.djangoproject.com/en/1.7/ref/models / lookup /


I have a list of names that I want to match case insensitive, is there a way to do it without using a loop like below?

a = ['name1', 'name2', 'name3']
result = any([Name.objects.filter(name__iexact=name) for name in a])

Unfortunatley, there are no __iin field lookup. But there is a iregex that might be usefull, like so:

result = Name.objects.filter(name__iregex=r'(name1|name2|name3)')

or even:

a = ['name1', 'name2', 'name3']
result = Name.objects.filter(name__iregex=r'(' + '|'.join(a) + ')')

Note that if a can contain characters that are special in a regex, you need to escape them properly.

NEWS: In Djano 1.7 it is possible to create your own lookups, so you can actually use filter(name__iin=['name1', 'name2', 'name3']) after proper initialization. See https://docs.djangoproject.com/en/1.7/ref/models/lookups/ for details.