Question

Je sais, je peux courir une affaire de recherche insensible django ORM. Comme,

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

Et aussi, je peux les chercher comme

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)

Y at-il un moyen direct pour un cas insensible ?? d'extraction Comme je veux dans une séquence telle que

# desired sequence: jake, Jake, sulley, Sulley

Sinon, suggérer une meilleure façon de le faire. Merci à l'avance.

Était-ce utile?

La solution

Cette réponse est pas à jour, consultez ci-dessous solution avec django 1.8 ->

J'ai trouvé la solution à l'aide .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')

lien d'origine:

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

Autres conseils

Depuis Django 1.8, il est possible avec:

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

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

Ceci est pour postgresql, mais peut-être il sera utile pour d'autres bases de données aussi:

http: // scottbarnham .com / blog / 2007/11/20 / insensible à la casse-commande avec-django-et-postgresql /

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top