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
.