我正在使用这个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() expressions
一起使用,以将.distinct()
应用于小写的twitter_handle
值:
>>> 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)
关于python - Django不区分大小写的 “distinct”查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44332481/