Django – Cómo ordenar el conjunto de consultas por número de caracteres en un campo

Mi modelo:

name = models.CharField(max_length=255) 

Intento ordenar el queryset. Solo pienso en esto:

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

¿Alguna idea?

puede que tenga que ordenar eso en python ..

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

o mentí (Una búsqueda rápida en Google encontró lo siguiente)

 MyModel.objects.extra(select={'length':'Length(name)'}).order_by('length') 

El nuevo hotness (a partir de Django 1.8 más o menos) es Length ()

 from django.db.models.functions import Length obj = MyModel.objects.all().order_by(Length('name').asc()) 

Por supuesto, puede ordenar los resultados usando Python sorted , pero eso no es lo ideal. En su lugar, puedes probar esto:

 MyModel.objects.extra(select={'length':'Length(name)'}).order_by('length') 

Tendrá que usar el argumento extra para pasar una función SQL:

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

Tenga en cuenta que esto es específico de la base de datos: MySQL usa LENGTH , otros podrían usar LEN .