Django模型有3到多个字段

时间:2011-07-07 21:24:56

标签: python django django-models

我有这些模型

class User(models.Model):
    user_name = models.CharField()
    ph_number = models.CharField()

class ExamPaper(models.Model):
    paper_name = models.CharField()
    paper_subject = models.CharField()

class Questions(models.Model):
    paper = models.ManyToManyField(ExamPaper, related_name='question_set')
    question_num = models.IntegerField()
    question_text = models.TextField()

现在我想为每篇论文存储每个用户的每个问题的结果。论文将有多个问题,一个问题也可能属于多篇论文。用户可以提供多篇论文和多个问题。

我希望mysql表有用户,文件和问题来定义所有的主键和另外两个字段'标记'和'结果'。我无法理解如何在django模型中执行此操作。这会有效吗?

class Result(models.Model):
     user = models.ManyToManyField(User)
     paper = models.ManyToManyField(ExamPaper)
     question = models.ManyToManyField(Question)
     marks = models.IntegerField()
     result = models.CharField()

任何人都可以解释一下吗?

2 个答案:

答案 0 :(得分:6)

您应该使用一对多(ForeignKey)关系而不是多对多关系:

class Result(models.Model):
     user = models.ForeignKey(User)
     paper = models.ForeignKey(ExamPaper)
     question = models.ForeignKey(Question)
     marks = models.IntegerField()
     result = models.CharField()

     class Meta:
         unique_together = (("user", "paper", "question"), )

如果问题只出现在一篇试卷上,那么Question.paper也应该是ForeignKey,您可以从paper中移除Result字段。

答案 1 :(得分:0)

首先,您可能需要_meta类的unique_together选项。请参阅:https://docs.djangoproject.com/en/1.3/ref/models/options/#unique-together

编辑:看起来django至少需要一个主键字段。 https://docs.djangoproject.com/en/1.3/topics/db/models/#automatic-primary-key-fields