Solicitando Django queryset por una propiedad

Estoy intentando ordenar un conjunto de consultas por una propiedad que definí en el modelo, pero no estoy seguro de cuál es la mejor manera de hacerlo. Aquí está la propiedad:

@property def name(self): if self.custom_name: return self.custom_name else: return self.module_object.name 

Esencialmente, me gustaría hacer un:

 things = Thing.objects.all().order_by('-name') 

pero, por supuesto, obtener un error de campo capturado mientras se procesa: no se puede resolver la palabra clave ‘nombre’ en el campo.

¿Algunas ideas?

EDITAR: Entiendo que no puedo ordenar de esta manera porque @property no es un campo de base de datos. Mi pregunta es cómo ordenar dado que @property no es un campo de base de datos.

No puedes hacer eso porque esa propiedad no está en MySQL, sino en tu código de Python. Si realmente quieres hacer esto, puedes hacerlo en el lado del cliente (aunque será muy lento):

 sorted(Thing.objects.all(), key=lambda t: t.name) 

order_by sucede en el nivel sql, por lo que no puede hacer uso de propiedades, solo datos de campo.

Echa un vistazo a la API de Queryset , puedes utilizar, por ejemplo, extra para anotar tu consulta y clasificarla.

Echa un vistazo a django-denorm . Le permite mantener los valores calculados en la base de datos (que luego puede usar para ordenar de manera eficiente) para el costo de un decorador de método único.

Solo puede ordenar por campos de base de datos. Puede extraer todos los registros, convertirlos en una lista y ordenarlos, aunque eso puede ser ineficiente y lento.

O puede agregar un campo de base de datos llamado name y completarlo a través de un enlace de guardado posterior; entonces puedes ordenarlo usando order_by .