我正在使用这个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/

10-12 22:43