为MyModel:
name = models.CharField(max_length=255)
我尝试对查询集进行排序。我只想到这个:
obj = MyModel.objects.all().sort_by(-len(name)) #???
有什么想法吗?
答案 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
。