DUPLICATE: Using a Django custom model method property in order_by()
我有两个型号;一个存储帖子,另一个存储在这些帖子上进行的投票,使用ForeignKey字段相关。每个投票都存储为单独的记录,因为我需要跟踪投票的用户和日期时间。
我创建了一个帮助函数,使用Django 1.1聚合Sum函数计算所有投票。
class Post(models.Model):
...some fields...
def tally(self):
return self.vote_set.all().aggregate(Sum('value'))['value__sum'] or 0
class Vote(models.Model):
post = models.ForeignKey(Post)
value = models.IntegerField()
...some fields...
我需要做的一个查询需要一次性order_by
的计数。但是:
Post.objects.all().order_by('tally')
产生以下模板错误:
渲染时捕获异常: 无法解析关键字'tally' 领域。选择是:date_created, description,id,is_active,name, 相关的,slug,用户,投票
有没有办法让order_by()
函数可以调用?
答案 0 :(得分:5)
事实证明,Annotate方法是解决方案:
Post.objects.all().annotate(vote_tally=Sum('vote__value')).order_by('-vote_tally')