2017-12-19 2 views
0

Ich versuche ein Modell für eine "Frage/Quiz" zu machen. Eine Frage kann so viele Möglichkeiten (Charfields) haben, wie der Benutzer möchte, und es kann eine oder mehrere richtige Antworten geben (aus diesen Optionen). Wie sollte ich dieses Modell definieren?Wie erstellt man ein "Quiz" -Modell mit einer unbekannten Anzahl von Optionen mit einer oder mehreren richtigen Antworten?

Frage: Einige lange Beschreibung.

  • Wahl 1
  • Wahl 2
  • Wahl 3 - Richtige Ans
  • Wahl 4 - Korrekte Ans

Bisher kam ich mit diesem, aber ich denke, es ist ein schlechtes Design :

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

Wenn Sie mehrere richtige Antworten haben, sollte 'Answer' ein 'correct'-Flag haben. – Daniel

Antwort

3

Wie von Daniel hingewiesen, Sie sh Sie sollten Ihre Antworten mit einer korrekten Flagge versehen. Es erscheint auch sinnvoller, sie an Question fk zu übergeben, da mehrere Fragen zur gleichen Antwort ungerade sind. Auf diese Weise einer Antwort gehört immer auf eine einzige Frage:

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

Wenn ich das obige setze, und ich versuche zu migrieren, sagt es mir, "non-nullable field 'question" zu antworten ohne einen Standard " –

0

Ich glaube, Sie ein Datenmodell haben würden wie: Quiz Eins-zu-viele Fragen haben, und Fragen haben eine Eins-zu-viele Antworten (davon mehrere können korrekt sein).

Also würde ich so etwas wie:

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) 

Dann die meisten Details auf würde basierend, wie Sie abfragen, um die „Umfrage“/Quiz und Klasse, es zu bauen.

Verwandte Themen