【发布时间】:2012-09-30 01:34:53
【问题描述】:
我的模特:
name = models.CharField(max_length=255)
我尝试对查询集进行排序。我就是这么想的:
obj = MyModel.objects.all().sort_by(-len(name)) #???
有什么想法吗?
【问题讨论】:
标签: python django django-queryset
我的模特:
name = models.CharField(max_length=255)
我尝试对查询集进行排序。我就是这么想的:
obj = MyModel.objects.all().sort_by(-len(name)) #???
有什么想法吗?
【问题讨论】:
标签: python django django-queryset
新的热点(Django 1.8 左右)是Length()
from django.db.models.functions import Length
obj = MyModel.objects.all().order_by(Length('name').asc())
【讨论】:
您需要使用 extra 参数来传递 SQL 函数:
obj = MyModel.objects.all().extra(order_by=['LENGTH(`name`)'])
请注意,这是特定于 db 的:MySQL 使用 LENGTH,其他人可能使用 LEN。
【讨论】:
您当然可以使用 Python 的sorted 对结果进行排序,但这并不理想。相反,你可以试试这个:
MyModel.objects.extra(select={'length':'Length(name)'}).order_by('length')
【讨论】:
您可能需要在 python 中对其进行排序..
sorted(MyModel.objects.all(),key=lambda o:len(o.name),reverse=True)
或者我撒了谎(谷歌快速搜索发现以下内容)
MyModel.objects.extra(select={'length':'Length(name)'}).order_by('length')
【讨论】: