2013-08-16 3 views
1

Я разрабатываю проект, который позволяет пользователям делать тест, основанный на некоторых случайных вопросах. Мой models.py имеет эти два класса:Django - Лучшая практика для объединения двух моделей

class Question(models.Model): 
    content = models.CharField() 
    ... 

class Answer(models.Model): 
    content = models.CharField() 
    isCorrect = models.BooleanField() 
    question = models.ForeignKey(Question) 

И в моем views.py я получаю 20 случайных вопросов, используя этот запрос:

questions = Question.objects.order_by('?')[:20] 

При таком подходе у меня есть только вопросы, но я хочу также ответы, связанные с каждым вопросом, я нашел некоторые решения, но я хотел бы знать, что может быть лучшей практикой для получения Вопросов и связанных с ними ответов? Могу ли я добавить их в конструктор вопроса?

Спасибо!

ответ

2

Вы можете сделать так, как сказал @karthikr, но он сделает дополнительный вызов базы данных для каждого вопроса.

Я хотел бы сделать это, может быть, таким образом:

questions = Question.objects.order_by('?')[:20] 
answers = Answer.objects.filter(question__in=questions) 

#some databases will not suppoert this, so use: 
#answers = Answer.objects.filter(question_id__in=[q.id for q in questions]) 

for question in question: 
    answers_for_question = filter(lambda answer:answer.question_id = question_id, answers) 

который находится всего в 2 дБ вызывает вместо 21

(для очень больших наборов вопросов, использовать itertools, чтобы получить ответы. для повышения производительности)

+0

Мне нравится это лучше. – karthikr

+0

Вы можете просто сделать 'questions.values_list ('id', flat = True)' – karthikr

+0

Но у него не будут объекты вопроса – YardenST

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