Подтвердить что ты не робот

Django-orm без учета регистра

Я знаю, я могу запустить регистр без учета регистра с 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

Если нет, предложите лучший способ сделать это. Спасибо заранее.

4b9b3361

Ответ 1

Я нашел решение с использованием .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')

оригинальная ссылка:

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