【发布时间】:2019-06-22 08:49:22
【问题描述】:
User.objects.filter(name__in=["A", "AB", "a", "ab", "Ab"])
这是在Django 中使用in 字段查找的示例。
但我想知道这里有使用in 作为不区分大小写的任何技巧吗,比如icontains?
谢谢
【问题讨论】:
User.objects.filter(name__in=["A", "AB", "a", "ab", "Ab"])
这是在Django 中使用in 字段查找的示例。
但我想知道这里有使用in 作为不区分大小写的任何技巧吗,比如icontains?
谢谢
【问题讨论】:
其他人的回答都很好。
我寻找了另一种使用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)
这只是另一种方式。我认为其他人的答案接近于一个好的答案。
【讨论】:
对于不区分大小写的操作,您可以使用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/获得帮助
【讨论】:
根据Django query case-insensitive list match,除了iregex查找之外没有其他解决方案
【讨论】: