3

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

我有两个模型;一个存储帖子,另一个存储对这些帖子的投票,使用 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、related、slug、user、vote

有什么方法可以让order_by()函数获取可调用对象吗?

4

1 回答 1

5

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

Post.objects.all().annotate(vote_tally=Sum('vote__value')).order_by('-vote_tally')
于 2009-11-21T09:53:04.830 回答