我目前正在学习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>]
但我不能:
>>> Author.objects.order_by('full_name')
FieldError: Cannot resolve keyword 'full_name' into field. Choices are: book, email, first_name, id, last_name
在这样的自定义属性上使用order_by的正确方法是什么?
不,你不能那样做。
order_by
是在数据库级别应用的,但是数据库对您的自定义Python方法一无所知。您可以使用单独的字段来排序:
或者使用Python进行排序:
相关问题 更多 >
编程相关推荐