Skip to main content
 首页 » 编程设计

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

2025年05月04日22bjzhanghao

我有这些模型

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() 

请问谁能解释一下?

请您参考如下方法:

您应该使用一对多 ( 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 并且您可以从 Result< 中删除 paper 字段.