Django模型有3到多个字段

Shw*_*nka 1 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()
Run Code Online (Sandbox Code Playgroud)

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

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

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

请有人能解释一下吗?

Udi*_*Udi 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"), )
Run Code Online (Sandbox Code Playgroud)

如果一个问题只出现在一个试卷上,那么Question.paper也应该是a ForeignKey,你可以paper从中删除该字段Result.