Django - 如何按字段中的字符数对查询集进行排序

时间:2012-10-09 16:54:58

标签: python django django-queryset

为MyModel:

name = models.CharField(max_length=255)

我尝试对查询集进行排序。我只想到这个:

obj = MyModel.objects.all().sort_by(-len(name)) #???

有什么想法吗?

4 个答案:

答案 0 :(得分:20)

你可能要在python中对它进行排序..

sorted(MyModel.objects.all(),key=lambda o:len(o.name),reverse=True)

或我撒谎(快速谷歌搜索发现以下内容)

MyModel.objects.extra(select={'length':'Length(name)'}).order_by('length')

答案 1 :(得分:15)

新的热度(从Django 1.8开始)是Length()

from django.db.models.functions import Length
obj = MyModel.objects.all().order_by(Length('name').asc())

答案 2 :(得分:7)

您当然可以使用Python的sorted对结果进行排序,但这并不理想。相反,你可以试试这个:

MyModel.objects.extra(select={'length':'Length(name)'}).order_by('length')

答案 3 :(得分:5)

您需要使用extra参数传递SQL函数:

obj = MyModel.objects.all().extra(order_by=['LENGTH(`name`)']) 

请注意,这是特定于数据库的:MySQL使用LENGTH,其他人可能使用LEN