我有一个要匹配的不区分大小写的名称列表,有没有办法不使用下面这样的循环?
a = ['name1', 'name2', 'name3']
result = any([Name.objects.filter(name__iexact=name) for name in a])
我有一个要匹配的不区分大小写的名称列表,有没有办法不使用下面这样的循环?
a = ['name1', 'name2', 'name3']
result = any([Name.objects.filter(name__iexact=name) for name in a])
不幸的是,有no,__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) + ')')
请注意,如果可以包含正则表达式中特殊的字符,则需要将其正确地设置为escape.
新闻:在Django 1.7+中,可以创建自己的查找,因此在正确初始化之后,可以实际使用filter(name__iin=['name1', 'name2', 'name3'])
.见documentation reference for details.