À l'aide d'un Django modèle personnalisé propriété de la méthode dans order_by()

Je suis actuellement en apprentissage de Django et de certains de mes modèles ont des méthodes pour obtenir des valeurs formaté d'une manière spécifique. Est-il possible d'utiliser la valeur de l'une de ces méthodes personnalisées que j'ai défini comme une propriété dans un modèle avec order_by()?

Voici un exemple qui montre comment la propriété est mise en œuvre.

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

Avec ce modèle, je peux le faire:

>>> Author.objects.all()
[<Author: John Doh>, <Author: Jane Doh>, <Author: Andre Miller>]
>>> Author.objects.order_by('first_name')
[<Author: Andre Miller>, <Author: Jane Doh>, <Author: John Doh>]

Mais je ne peut pas faire:

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

Quelle serait la bonne façon d'utiliser les order_by sur une propriété personnalisée comme ça?

InformationsquelleAutor Andre Miller | 2009-06-11