Python Django-如何按字段中的字符数对queryset进行排序
MyModel:Python Django-如何按字段中的字符数对queryset进行排序,python,django,django-queryset,Python,Django,Django Queryset,MyModel: name = models.CharField(max_length=255) 我尝试对查询集进行排序。我只是想: obj = MyModel.objects.all().sort_by(-len(name)) #??? 有什么想法吗?您可能需要用python对其进行排序 sorted(MyModel.objects.all(),key=lambda o:len(o.name),reverse=True) 或者我撒谎了(谷歌快速搜索发现如下) 当然,您可以使用Python的
name = models.CharField(max_length=255)
我尝试对查询集进行排序。我只是想:
obj = MyModel.objects.all().sort_by(-len(name)) #???
有什么想法吗?您可能需要用python对其进行排序
sorted(MyModel.objects.all(),key=lambda o:len(o.name),reverse=True)
或者我撒谎了(谷歌快速搜索发现如下)
当然,您可以使用Python的
sorted
对结果进行排序,但这并不理想。相反,您可以尝试以下方法:
MyModel.objects.extra(select={'length':'Length(name)'}).order_by('length')
您需要使用
extra
参数来传递SQL函数:
obj = MyModel.objects.all().extra(order_by=['LENGTH(`name`)'])
请注意,这是db特有的:MySQL使用长度
,其他人可能使用LEN
新的热度(从Django 1.8左右开始)是
obj = MyModel.objects.all().extra(order_by=['LENGTH(`name`)'])
from django.db.models.functions import Length
obj = MyModel.objects.all().order_by(Length('name').asc())