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

AAA*_*AAA 0 django django-views

我想数一下我列出的对象.

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

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

# Edited out
Run Code Online (Sandbox Code Playgroud)

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......
Run Code Online (Sandbox Code Playgroud)

我也需要为创作者和角色做这件事,除了他们与问题的多对多关系,并且视图基本上看起来与 def titles

谢谢.

DTi*_*ing 16

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

some_title = Title.object.get(pk=1)
some_title.issue_set.count()
Run Code Online (Sandbox Code Playgroud)

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

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

from django.db.models import Count
titles_with_counts = Title.objects.all().annotate(issue_count=Count('issue__id'))
Run Code Online (Sandbox Code Playgroud)

现在,该qs中的每个标题都可以通过使用来计算 .issue_count

for title in titles_with_counts:
    print title.title, title.issue_count
Run Code Online (Sandbox Code Playgroud)