具有3个多对多字段的Django模型

2024-09-30 22:27:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这些模型

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表包含user、paper和question来定义主键,以及另外两个字段“marks”和“result”。我不明白如何在django模型中实现这一点。这是否可行:

^{pr2}$

谁能解释一下吗?在


Tags: 用户name模型numbermodelmodelsphclass
2条回答

首先,您可能需要为\u元类使用唯一的\u 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

您应该使用一对多(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"), )

如果一个问题只能出现在一张试卷上,那么问题.论文也应该是ForeignKey,并且可以从Result中删除{}字段。在

相关问题 更多 >