2013-08-16 55 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的DB調用,而不是21

(對於一個真正的大套試題,利用itertools得到答案。爲更好的表現)

+0

我更喜歡這個。 – karthikr

+0

你可以做'questions.values_list('id',flat = True)' – karthikr

+0

但是他不會有問題對象 – YardenST