一尘不染

django-orm不区分大小写的顺序

django

我知道,我可以从DJango ORM运行不区分大小写的搜索。喜欢,

User.objects.filter(first_name__contains="jake")
User.objects.filter(first_name__contains="sulley")
User.objects.filter(first_name__icontains="Jake")
User.objects.filter(first_name__icontains="Sulley")

而且,我可以将它们作为

user_list = User.objects.all().order_by("first_name")
# sequence: (Jake, Sulley, jake, sulley)
user_list = User.objects.all().order_by("-first_name") # for reverse
# sequence: (sulley, jake, Sulley, Jake)

是否存在不区分大小写的直接获取方式?正如我想要一个序列

# desired sequence: jake, Jake, sulley, Sulley

如果没有,那么建议一种最佳方法。提前致谢。


阅读 462

收藏
2020-04-01

共2个答案

一尘不染

这个答案已经过时,请使用django 1.8检查以下解决方案->

我发现使用.extra的解决方案

class MyModelName(models.Model):
   is_mine = models.BooleanField(default=False)
   name = models.CharField(max_length=100)


MyModelName.objects.filter( is_mine=1 ).extra(\
    select={'lower_name':'lower(name)'}).order_by('lower_name')
2020-04-01
一尘不染

从Django 1.8开始,可以使用:

from django.db.models.functions import Lower
MyModel.objects.order_by(Lower('myfield'))
2020-04-01