【问题标题】:Django difficulty in displaying the data(count)Django难以显示数据(计数)
【发布时间】:2016-05-23 06:55:31
【问题描述】:

我是 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>]

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

谁能帮我查询每个科目的书籍数量

任何帮助都非常感谢..在此先感谢

【问题讨论】:

  • 请为您的问题选择一个更合适的标题。您的问题不在于显示数据,而在于计算计数。
  • @Daniel Roseman...已完成更改

标签: python django django-models django-shell


【解决方案1】:

如果你只需要某个学科的书籍数量,有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 

【讨论】:

  • @Sayse..我收到错误“FieldError:无法将关键字'books'解析到字段中。选择是:book、created、id、name”
  • @AmoghAngadi - 应该是book
  • @AmoghAngadi - 不用担心,我对它的文档的回答中有一个链接
  • @Sayse..我怎样才能分别获得电子和计算机科学的书籍数量?
  • @spidy 这个答案应该给你你想要的。如果你想在一个对象中使用它,试试这个:Subject.objects.annotate(num_books=Count('book')).values('name', 'num_books')
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-22
  • 2022-01-13
  • 1970-01-01
  • 1970-01-01
  • 2020-10-08
  • 2018-03-20
相关资源
最近更新 更多