计算Django中的外键和ManyToMany中的对象

时间:2011-05-09 01:24:25

标签: django django-views

我想计算我列出的对象。

我想计算每个标题中的问题数量。

这就是我的models.py设置方式:

# Edited out

Views.py:

def titles (request):
    all_titles = Title.objects.all().order_by('title')
    num_titles = Title.objects.all().count()
    latest_titles = Title.objects.order_by('-date_added')
    title_a = Title.objects.filter(title__startswith='A')
    title_b = Title.objects.filter(title__startswith='B')

     ......etc......

我也需要为创作者和角色执行此操作,除非他们与问题的多对多关系,并且视图基本上与def titles

相同

谢谢。

1 个答案:

答案 0 :(得分:16)

要获取每个标题的相关问题,您可以使用向后关系查找。由于您未在创建关系的问题模型中指定相关名称,因此使用附加到相关模型的下层名称的_set执行查找。在您的情况下issue_set

some_title = Title.object.get(pk=1)
some_title.issue_set.count()

但是,这将为您想要计算的每个标题执行数据库命中。

您可能希望使用计数来标注标题qs。 docs

from django.db.models import Count
titles_with_counts = Title.objects.all().annotate(issue_count=Count('issue__id'))

现在,使用.issue_count

可以访问该qs中的每个标题
for title in titles_with_counts:
    print title.title, title.issue_count