2017-12-19 18 views
0

「質問/クイズ」のモデルを作成しようとしています。質問には、ユーザーが望むだけ多くの選択肢(Charfields)を持つことができ、そのうちの1つまたは複数の正しい答えがあります。このモデルをどのように定義すればよいですか?1つまたは複数の正解でオプションが不明な「クイズ」モデルを作成するにはどうすればよいですか?

質問:長い説明。

  • 選択肢1
  • 選択肢2
  • 選択肢3 - 正しい答
  • 選択肢4 - 正しい答は

は、これまでのところ、私はこれを思い付いたが、私はそれが悪いデザインだと思います:

class Question(models.Model): 
    description = models.CharField('Description', max_length=300) 
    correct_answer_id = models.UUIDField('answer_id', null=True) 
    options = models.ManyToManyField(Answer) 

class Answer(models.Model): 
    """ 
    Answer's Model, which is used as the answer in Question Model 
    """ 
    text = models.CharField(max_length=128, verbose_name=u'Answer\'s text') 
    ans_id = models.UUIDField(default=uuid.uuid1()) 
+0

正解が複数ある場合は、「回答」には「正しい」フラグが必要です。 – Daniel

答えて

3

Danielで指摘されているように、sh ouldはあなたの答えを正しいフラグで提供します。また、同じ答えにぴったりの複数の質問が奇妙であるため、Questionにfkを与える方がより合理的です。

class Question(models.Model): 
    description = models.CharField('Description', max_length=300) 

    def correct_answers(self): 
     return self.answer_set.filter(correct=True) 

    # ... 


class Answer(models.Model): 
    text = models.CharField(max_length=128) 
    question = models.ForeignKey(Question) 
    correct = models.BooleanField('Correct', default=False) 
+0

私は上記を設定し、移行しようとすると、「デフォルトなしで応答するためのnullableではないフィールドの質問」 –

0

私は好きですが、データモデルを持っていると思う:この方法で1答えは常に単一の質問に属しクイズは1対多の質問を持っている、との質問には、(1対多の答えを持っているの複数を正確にすることができます)。

class Quiz(models.Model): 
    ... 
class Question(models.Model): 
    quiz = models.ForeignKey(Quiz) 
    ... 
class Answer(models.Model): 
    question = models.ForeignKey(Question) 
    text = ... 
    is_correct = models.BooleanField(default=False) 

[詳細のほとんどは、あなたが「調査」/クイズやグレード、それを構築するために照会方法に基づいて次のようになります。

だから私のような何かをしたいです。