2012-06-07 3 views
1

Есть ли лучший способ сделать этолучший способ запроса в Джанго

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

В приведенном выше запросе Answers модель имеет внешний ключ отношения с Questions. Но в приведенном выше сценарии запрос Ответ на запрос выполняется на основе количества вопросных объектов.

Предположим, что существует 10 вопросительных объектов, затем 10 отдельных запросов для ответа на запрос. Есть ли способ сделать это с помощью одного запроса, потому что по мере увеличения количества вопросных объектов это будет проблемой, потому что число запросов в ответах также увеличивается.

ответ

6

Так что, похоже, вы просто заботитесь о количестве ответов, а чем получение реальных объектов ответа. Вы можете сделать это с аннотациями:

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

как написать выше запрос, чтобы получить questionobjects чьи ответы count больше, чем 3 –

+0

Я знаю, как это сделать с использованием SQL-запроса, но iam new для django и с ним возникают проблемы –

+0

@ChingChong https://docs.djangoproject.com/en/dev/topics/db/aggregation/#filtering -о n-аннотации – DrTyrsa

4

Посмотрите на аннотацию: Django Annotation

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

Тогда вы можете получить доступ графа с [q.count for q in questions]

Смежные вопросы