有更好的方法吗
questionobjects = Questions.objects.all()
for questionobject in questionobjects:
answerobjects = Answers.objects.filter(question=questionobject.id).count()
在上面的查询中,Answers
模型与Questions
具有外键关系。但是在上面的脚本中,查询Answer查询基于questionobjects的数量执行。
假设有10个问题对象,则会发生10个单独的回答对象查询。有没有办法用单个查询执行此操作,因为随着questionobjects数量的增加,这将是一个问题,因为answerobjects查询的数量也增加
答案 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]