Python 在order_by()中使用Django自定义模型方法属性

Python 在order_by()中使用Django自定义模型方法属性,python,django,django-models,Python,Django,Django Models,我目前正在学习Django,我的一些模型有定制的方法来以特定的方式格式化值。可以使用这些自定义方法之一的值吗?我已将它们定义为order_by()模型中的属性 下面是一个演示如何实现该属性的示例 class Author(models.Model): first_name = models.CharField(max_length=30) last_name = models.CharField(max_length=40) email = models.EmailFie

我目前正在学习Django,我的一些模型有定制的方法来以特定的方式格式化值。可以使用这些自定义方法之一的值吗?我已将它们定义为order_by()模型中的属性

下面是一个演示如何实现该属性的示例

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
使用此模型,我可以做到:

>>> 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>]

在这样的自定义属性上使用order_by的正确方法是什么?

不,您不能这样做
order_by
应用于数据库级别,但数据库无法了解自定义Python方法的任何信息

您可以使用单独的字段进行排序:

Author.objects.order_by('first_name', 'last_name')
或者在Python中进行排序:

sorted(Author.objects.all(), key=lambda a: a.full_name)
在这种情况下,
F()
对象可能会起作用。尚未测试,但可能按
F('first_name')+''+F('last_name')
排序?要按
排序的多个自定义字段排序
,可以使用key=attrgetter,如For
所述排序(cghsection.objects.all(),key=lambda:a.modtitle)
,我得到
类型错误:'@JoelGMathew
sorted(Author.objects.all(), key=lambda a: a.full_name)