50

DJangoORMから大文字と小文字を区別しない検索を実行できます。好き、

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

そうでない場合は、それを行うための最良の方法を提案します。前もって感謝します。

4

4 に答える 4

103

Django 1.8以降、次の方法で可能です:

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

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

于 2015-12-29T07:27:48.917 に答える
25

この回答は古くなっています。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')

元のリンク:

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

于 2012-08-19T11:54:53.160 に答える
5

これはpostgresql用ですが、他のデータベースにも役立つ可能性があります。

http://scottbarnham.com/blog/2007/11/20/case-insensitive-ordering-with-django-and-postgresql/

于 2010-08-04T19:37:37.477 に答える