我正在使用此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
答案 0 :(得分:1)
您可以.annotate()
和Func() expressions
一起使用.distinct()
代替twitter_handle
值:{/ p>
>>> 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)
答案 1 :(得分:0)
一种解决方案是使用annotate
创建一个小写值的新字段,然后使用distinct
。
尝试类似
的内容from django.db.models.functions import Lower
(people.exclude(twitter_handle=None)
.annotate(handle_lower=Lower('twitter_handle'))
.distinct('handle_lower'))