我知道,我可以从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
如果没有,那么建议一个最好的方法。提前谢谢。
答案 0 :(得分:59)
从Django 1.8开始,可以使用:
from django.db.models.functions import Lower
MyModel.objects.order_by(Lower('myfield'))
答案 1 :(得分:24)
这个答案已经过时了,请查看以下解决方案,使用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
答案 2 :(得分:5)
这适用于postgresql,但也许对其他数据库也很有用:
http://scottbarnham.com/blog/2007/11/20/case-insensitive-ordering-with-django-and-postgresql/
答案 3 :(得分:0)
让我们举一个例子,您必须对 用户 模型
中的字段 "first_name" 进行不区分大小写的排序# Importing the Lower Function
from django.db.models.functions import Lower
#For ordering by Ascending order
User.objects.all().order_by(Lower('first_name'))
#For ordering by Descending order
User.objects.all().order_by(Lower('first_name').desc())
Lower 函数将所有 "first_name" 值转换为小写,然后进行相应的排序。