我知道这是一个非常基本的问题。假设我有两个模型:
class Quiz(models.Model):
name = models.CharField(max_length=100)
description = models.TextField()
class Question(models.Model):
quiz = models.ForeignKey(Quiz)
name = models.CharField(max_length=100)
在这里,一个测验可以包含许多问题,一个问题只属于一个测验。这就是ForeignKey
关系有意义的原因。但不是这样,我可以这样做:
class Question(models.Model):
name = models.CharField(max_length=100)
description = models.TextField()
class Quiz(models.Model):
question = models.ForeignKey(Question)
name = models.CharField(max_length=100)
有什么区别?而且,我如何确定应该将ForeignKey
放在哪个模型上。感谢
答案 0 :(得分:1)
它真的是关于所有权。你需要问问自己,谁拥有哪些领域,或者这至少是我对此的看法。
在您的第一个示例中,Question
属于Quiz
模型,但在第二个示例中,Quiz
模型归Question
对象所有。
所以,这是一个应该问自己的简单问题,一个问题是属于许多测验还是一个测验有很多问题?由于Quiz
是一个有很多问题的问题,你应该使用第一个问题。
查看ForeignKey
上的文档。
答案 1 :(得分:1)
你自己说。在您的第一个片段中,一个问题属于一个测验,测验有很多问题。但是如果你把它移到另一个模型,关系也会改变:现在一个问题属于很多测验,测验只有一个问题。所以它取决于你想要建立一对多关系的“多”方面的模型:具有ForeignKey字段的那个是“很多”的那个。
答案 2 :(得分:0)
外键只是OnetoMany Field。
所以对于第一个片段,即
class Quiz(models.Model):
name = models.CharField(max_length=100)
description = models.TextField()
class Question(models.Model):
quiz = models.ForeignKey(Quiz)
name = models.CharField(max_length=100)
您可以使用一个问题标记测验。 但在第二个片段中,即
class Question(models.Model):
name = models.CharField(max_length=100)
description = models.TextField()
class Quiz(models.Model):
question = models.ForeignKey(Question)
name = models.CharField(max_length=100)
您可以将一个问题标记为多个测验。
您的要求是"一个测验可以包含许多问题"所以你应该使用第一个片段。
如果您使用第二个片段进行,那么一个问题与许多您不想做的测验有关。