django测验应用模型的多项选择题

问题描述 投票:0回答:1

我在django中创建测验应用程序,我的django模型问题是这样的,

class Question(models.Model):
    questions = models.CharField(max_length=50, unique=True)
    choice1 = models.CharField(max_length=50, unique=True)
    choice2 = models.CharField(max_length=50, unique=True)
    choice3 = models.CharField(max_length=50, unique=True)
    choice4 = models.CharField(max_length=50, unique=True)
    correct_answer = models.CharField(max_length=50, unique=True)

这很好或保存postgres数组中的四个选项或将选项保存在单独的表中。

python django postgresql
1个回答
5
投票

对于正确规范化的关系数据库模式,您需要在Choice上使用外键的独特Question模型:

class Question(models.Model):
    question = models.CharField(...)

class Choice(models.Model):
    question = models.ForeignKey("Question", related_name="choices")
    choice = modelsCharField("Choice", max_length=50)
    position = models.IntegerField("position")

    class Meta:
        unique_together = [
            # no duplicated choice per question
            ("question", "choice"), 
            # no duplicated position per question 
            ("question", "position") 
        ]
        ordering = ("position",)

然后你可以用Question获得myquestion.choices.all()的选择(并从Choice获得mychoice.question的问题)。

请注意,这不会对问题的选择数量施加任何限制,甚至不会强制要求问题至少有一个相关的选择。

除非你有非常令人信服的理由,否则在使用关系数据库时你需要一个正确规范化的模式(rdbms不仅仅是bitbuckets,它们提供了许多有用的功能 - 只要你有一个合适的模式, 那是)。

© www.soinside.com 2019 - 2024. All rights reserved.