20

我的模型:

name = models.CharField(max_length=255)

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

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

任何的想法?

4

4 回答 4

26

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

from django.db.models.functions import Length
obj = MyModel.objects.all().order_by(Length('name').asc())
于 2016-10-06T00:19:42.897 回答
25

您可能必须在 python 中对其进行排序..

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

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

MyModel.objects.extra(select={'length':'Length(name)'}).order_by('length')
于 2012-10-09T16:59:54.853 回答
8

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

MyModel.objects.extra(select={'length':'Length(name)'}).order_by('length')
于 2012-10-09T17:00:19.347 回答
5

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

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

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

于 2012-10-09T17:00:28.190 回答