Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django-如何按字段中的字符数对queryset进行排序_Python_Django_Django Queryset - Fatal编程技术网

Python Django-如何按字段中的字符数对queryset进行排序

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的

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的
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())