django-orm case-insensitive order by

case-insensitive, django, django-orm, fetch

Solution

This answer is outdated, follow top voted solution with django >= 1.8

I found solution using .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')

original link:

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

Problem

I know, I can run a case insensitive search from DJango ORM. Like, ``` 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") ``` And also, I can fetch them as ``` 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) ``` Is there a direct way for a case-insensitive fetch?? As in I want a sequence as ``` # desired sequence: jake, Jake, sulley, Sulley ``` If not, then suggest a best way to do it. Thanks in advance.

Original source