Python 如何创建一个;问答游戏;具有未知数量选项且有一个或多个正确答案的模型?

Python 如何创建一个;问答游戏;具有未知数量选项且有一个或多个正确答案的模型?,python,django,django-models,Python,Django,Django Models,我正在尝试做一个“问题/测验”的模型。一个问题可以有用户想要的任意多个选项(字符域),并且可以有一个或多个正确答案(在这些选项中)。我应该如何定义这个模型? 问题:一些长的描述 选择1 选择2 选择3-正确答案 选择4-正确的Ans 到目前为止,我提出了这个,但我认为这是一个糟糕的设计: class Question(models.Model): description = models.CharField('Description', max_length=300) co

我正在尝试做一个“问题/测验”的模型。一个问题可以有用户想要的任意多个选项(字符域),并且可以有一个或多个正确答案(在这些选项中)。我应该如何定义这个模型?

问题:一些长的描述

  • 选择1
  • 选择2
  • 选择3-正确答案
  • 选择4-正确的Ans
到目前为止,我提出了这个,但我认为这是一个糟糕的设计:

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())
正如所指出的,您应该为您的答案提供正确的标志。此外,给他们一个fk to
问题
似乎更明智,因为多个问题符合相同的答案是很奇怪的。这样一来,一个答案总是属于一个问题:

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)
正如所指出的,您应该为您的答案提供正确的标志。此外,给他们一个fk to
问题
似乎更明智,因为多个问题符合相同的答案是很奇怪的。这样一来,一个答案总是属于一个问题:

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)

我想你会有这样一个数据模型:测验有一对多的问题,问题有一对多的答案(其中多个答案是正确的)

所以我会做一些类似的事情:

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)

然后,大部分细节将基于您如何查询以构建“调查”/“测验”并对其进行评分。

我认为您会有这样一个数据模型:测验有一对多的问题,而问题有一对多的答案(其中多个答案是正确的)

所以我会做一些类似的事情:

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)

然后,大部分详细信息将基于您如何查询以构建“调查”/测验并对其评分。

如果您有多个正确答案,
Answer
应该有一个
correct
-flag。如果您有多个正确答案,
Answer
应该有一个
correct
-flag。当我设置上述内容并尝试迁移时,它告诉我,“不可空字段'question'在没有默认值的情况下回答”当我设置上述内容并尝试迁移时,它告诉我,“不可空字段'question'在没有默认值的情况下回答”