是否可以使用可调用的order_by?

时间:2009-11-21 09:19:46

标签: django aggregate django-queryset

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()函数可以调用?

1 个答案:

答案 0 :(得分:5)

事实证明,Annotate方法是解决方案:

Post.objects.all().annotate(vote_tally=Sum('vote__value')).order_by('-vote_tally')