2017-02-07 11 views
0

で使用されるように、私は、各質問に対するがクイズアプリのためにデータベース

class Question(models.Model): 
    question_id=models.IntegerField(default=0) 
    question_text=models.CharField(max_length=1000) 

    def __str__(self): 
    return self.question_text 


class Options(models.Model): 
    question=models.ForeignKey(Question,on_delete=models.CASCADE) 
    options=models.CharField(max_length=500) 
    is_answer=models.BooleanField(default=False) 

    def __str__(self): 
    return self.options 

一つだけのオプションがtrueに設定されている以下のモデルを持っています。 is_answerフィールドがTrueに設定されている質問のオプションを見つける必要があります。ここで最高のクエリは何ですか?私はSqliteを使用しています。ありがとうございました。

+0

...とクエリが何を返す必要がありますか? – dhke

+0

@dhke updated、申し訳ありません – Ananthu

答えて

1

あなたが行うことができます。

# Get a Question instance. Your implementation may be different. 
question = Question.objects.get(pk=question_pk) 
correct_option = question.options_set.filter(is_answer=True).first() 

question.options_set.filter(is_answer=True)戻りますので.first()戻りクエリセットの最初のインスタンスをやっquestionインスタンスへのFKを持ってOptionsインスタンスのクエリセットを行います。

ます。また、特定のオプション(与えられた「各質問のための唯一のオプションがtrueに設定されている」) getでき

try:  
    question.options_set.get(is_answer=True) 
except Options.DoesNotExist: 
    raise 
+0

...それぞれの質問に対してたった1つのオプションだけが真であるという主張が与えられたとき、不変性に違反したときにエラーが発生するため、 '.get(is_answer = True)早く...) – dhke

+0

ありがとう男:)その仕事 – Ananthu

+0

@dhkeそうです。しかし、私は彼が特定の質問に対して 'is_answer = True'で複数のオプションを作成することを避けるために、モデル層で検証を行っていると思います。 –

関連する問題