Usando una propiedad del método de modelo personalizado de Django en order_by ()

Actualmente estoy aprendiendo Django y algunos de mis modelos tienen métodos personalizados para obtener valores formateados de una manera específica. ¿Es posible usar el valor de uno de estos métodos personalizados que he definido como una propiedad en un modelo con order_by ()?

Aquí hay un ejemplo que demuestra cómo se implementa la propiedad.

class Author(models.Model): first_name = models.CharField(max_length=30) last_name = models.CharField(max_length=40) email = models.EmailField(blank=True, verbose_name='e-mail') def _get_full_name(self): return u'%s %s' % (self.first_name, self.last_name) full_name = property(_get_full_name) def __unicode__(self): return self.full_name 

Con este modelo puedo hacer:

 >>> Author.objects.all() [, , ] >>> Author.objects.order_by('first_name') [, , ] 

Pero no puedo hacer:

 >>> Author.objects.order_by('full_name') FieldError: Cannot resolve keyword 'full_name' into field. Choices are: book, email, first_name, id, last_name 

¿Cuál sería la forma correcta de usar order_by en una propiedad personalizada como esta?

No, no puedes hacer eso. order_by se aplica en el nivel de la base de datos, pero la base de datos no puede saber nada acerca de sus métodos personalizados de Python.

Puede usar los campos separados para ordenar:

 Author.objects.order_by('first_name', 'last_name') 

o hacer el pedido en Python:

 sorted(Author.objects.all(), key=lambda a: a.full_name)