代码之家  ›  专栏  ›  技术社区  ›  simplyharsh

django orm不区分大小写order by

  •  30
  • simplyharsh  · 技术社区  · 15 年前

    我知道,我可以从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
    

    3 回复  |  直到 15 年前
        1
  •  26
  •   Troyhy    8 年前

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

    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')
    

    原始链接:

    http://naorrosenberg.blogspot.fi/2011/04/django-models-orderby-charfield-case.html

        2
  •  92
  •   uri.z    10 年前

    由于Django 1.8,可以使用:

    from django.db.models.functions import Lower
    MyModel.objects.order_by(Lower('myfield'))
    

    https://code.djangoproject.com/ticket/6498