簡體   English   中英

Django model 具有 3 個多對多字段

[英]Django model with 3 many to many fields

我有這些模型

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字段。

首先,您可能需要 _meta class 的 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM