在Django Orm中如何使用不区分大小写的操作?

时间:2019-01-29 09:14:32

标签: django orm lookup

User.objects.filter(name__in=["A", "AB", "a", "ab", "Ab"])

这是在in中使用Django字段查找的示例。

但是我想知道这是使用inicontains这样不区分大小写的技巧吗?

谢谢

3 个答案:

答案 0 :(得分:3)

其他人的回答很好。

我正在寻找另一种使用Lower function

的方式
lower_list = map(lambda x:x.lower(), ["A", "AB", "a", "ab", "Ab"])
User.objects.annotate(name_lower=Lower('name').filter(name_lower__in=lower_list)

这是另一种方式。我认为其他人的答案接近一个好的答案。

答案 1 :(得分:2)

对于不区分大小写的操作,可以使用iregex

User.objects.filter(name__iregex=r'(A|AB|a|ab|Ab)')

引用:https://docs.djangoproject.com/en/dev/ref/models/querysets/#iregex

更新: 您可以自己查找。从https://docs.djangoproject.com/en/dev/ref/models/lookups/

获取帮助

答案 2 :(得分:1)

根据Django query case-insensitive list match,除了进行iregex查找外,没有其他解决方案