我正在使用这个Django查询
people.exclude(twitter_handle=None).distinct('twitter_handle').values_list('twitter_handle', flat=True)
我的查询结果返回了两个对象。例如:
['Abc','abc']
如何获得不区分大小写的结果?就像在这种情况下一样。
['abc']
使用django 1.9.6, python 2.7。
.annotate()
和Func()表达式
来在小写的twitter_handle
值上应用.distinct()
:>>> from django.db.models.functions import Lower
>>> people.order_by().exclude(twitter_handle=None).annotate(handle_lower=Lower("twitter_handle")).distinct("handle_lower")
由于您无法在values_list('twitter_handle', flat=True)
查询中应用distinct
,因为您无法在values_list
中应用不存在的字段,所以您需要自行完成此操作:
>>> queryset = people.order_by().exclude(twitter_handle=None).annotate(handle_lower=Lower("twitter_handle")).distinct("handle_lower")
>>> [p.twitter_handle for p in queryset]
或者你可以获取小写的twitter_handle
值:
>>> people.order_by().exclude(twitter_handle=None).annotate(handle_lower=Lower("twitter_handle")).distinct("handle_lower").values_list("handle_lower", flat=True)
annotate
创建一个新字段并附带小写值,然后对其使用 distinct
。from django.db.models.functions import Lower
(people.exclude(twitter_handle=None)
.annotate(handle_lower=Lower('twitter_handle'))
.distinct('handle_lower'))