Django难以显示数据(计数)

时间:2016-02-12 07:45:11

标签: python django django-models django-shell

我是django的新手,并试图通过建立论坛来学习

我的模特

class Subject(models.Model):
    name=models.CharField(max_length=128)
    created=models.DateTimeField('Created Date')


    def __str__(self):
        return self.name

class Book(models.Model):
    book_subject=models.ForeignKey(Subject,on_delete=models.CASCADE)
    book_title=models.CharField(max_length=128)
    url=models.URLField()
    votes=models.IntegerField(default=0)


    def __str__(self):
        return self.book_title

我在django shell中对数据库的查询

Subject.objects.all()
>>>[<Subject: electronics>, <Subject: compter science>]

q=Subject.objects.get(id=2)
q.book_set.all()
>>>[<Book: python django>, <Book: python flask>]

我应该如何获得每个科目的书籍数量。 (为了电子和计算机科学科目 数量>)我知道这可能是直截了当的答案。我想在论坛中显示模板,其中显示主题名称和它包含的书籍数量

有人可以帮我查询以获得每个科目的书数

非常感谢任何帮助。谢谢提前

1 个答案:

答案 0 :(得分:3)

如果您只需要特定主题的图书数量,则可以count

Subject.objects.get(id=2).book_set.count()

如果您需要计算书籍数量的科目,您可以annotate

from django.db.models import Count
subjects = Subject.objects.annotate(num_books=Count('book'))

for subj in subjects:
    print subj.num_books