2012-06-07 78 views
1

查詢是否有更好的方法來做到這一點更好的方法在Django

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

在上面的查詢Answers模型具有Questions外鍵關係。但在上面的腳本中,查詢Answer查詢根據問題對象的數量執行。

假設有10個問題對象,則發生10個單獨的答案對象查詢。有沒有辦法做到這一點與單個查詢,因爲隨着問題對象的數量增加,這將是一個問題,因爲答案對象查詢的數量也增加

回答

6

因此,它看起來像你只是在意計數的答案,而是比得到實際的答案對象。你可以用註解做到這一點:

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

訪問計數如何寫上面的查詢得到questionobjects其答案計數是大於3 –

+0

我知道如何使用SQL查詢,但IAM新django和它的問題 –

+0

@ChingChong https://docs.djangoproject.com/en/dev/topics/db/aggregation/#filtering -o n-annotations – DrTyrsa

4

看看註釋:Django Annotation

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

然後你就可以用[q.count for q in questions]