在django中查询的更好方法

时间:2012-06-07 11:01:59

标签: django django-models django-views django-queryset

有更好的方法吗

questionobjects = Questions.objects.all()
for questionobject in questionobjects:
        answerobjects = Answers.objects.filter(question=questionobject.id).count()

在上面的查询中,Answers模型与Questions具有外键关系。但是在上面的脚本中,查询Answer查询基于questionobjects的数量执行。

假设有10个问题对象,则会发生10个单独的回答对象查询。有没有办法用单个查询执行此操作,因为随着questionobjects数量的增加,这将是一个问题,因为answerobjects查询的数量也增加

2 个答案:

答案 0 :(得分:6)

所以看起来你只关心答案的数量,而不是得到实际的答案对象。您可以使用注释执行此操作:

from django.db.models import Count
Question.objects.all().annotate(Count('answers'))

答案 1 :(得分:4)

查看注释:Django Annotation

from django.db.models import Count
questions = Questions.objects.annotate(count=Count('answers'))

然后您可以使用[q.count for q in questions]

访问计数