如何对过滤的外键计数进行排序和分页?

时间:2012-05-23 00:17:53

标签: django django-orm

我有一个从EntryVote的外键,我希望对某个日期之前创建的Vote进行排序。我怎样才能以漂亮的方式做到这一点?通常我会这样做:

entries = Entry.objects.annotate(
    num_votes = Count('votes')).order_by('-num_votes')

page = request.GET.get('page')
paginator = Paginator(entries, 12)
try:
    entries = paginator.page(page)
except PageNotAnInteger:
    entries = paginator.page(1)
except EmptyPage:
    entries = paginator.page(paginator.num_pages)

如何对它进行排序,以便只计算在特定日期之前创建的投票?是我查询数据库并迭代所有内容的唯一选择吗?

1 个答案:

答案 0 :(得分:1)

如果您只是添加过滤器,它应该在聚合中包含该过滤器。您可以使用外键的related_name来过滤该部分的连接。

entries = Entry.objects.annotate(
    num_votes = Count('votes')).order_by('-num_votes')

entries = entries.filter(votes__created__lte=some_date)