Sov*_*iut 3 django aggregate django-queryset
DUPLICATE: 在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...
Run Code Online (Sandbox Code Playgroud)
我需要做的一个查询需要做一次order_by计数.然而:
Post.objects.all().order_by('tally')
Run Code Online (Sandbox Code Playgroud)
产生以下模板错误:
渲染时捕获异常:无法将关键字"tally"解析为字段.选项包括:date_created,description,id,is_active,name,related,slug,user,vote
有没有办法让order_by()函数可以调用?
事实证明,Annotate方法是解决方案:
Post.objects.all().annotate(vote_tally=Sum('vote__value')).order_by('-vote_tally')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1233 次 |
| 最近记录: |