0

我知道这是一个非常基本的问题。假设我有两个模型:

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. 谢谢

4

3 回答 3

1

它真的与所有权有关。你需要问问自己,谁拥有哪些领域,或者至少我是这么想的。

在您的第一个示例中,Question属于Quiz模型,但在第二个示例中,Quiz模型归Question对象所有。

所以,这是一个应该问自己的简单问题,一个问题属于许多测验还是一个测验有很多问题?既然Quiz是有很多问题的那个,你应该使用第一个。

检查上的文档ForeignKey

于 2013-09-23T09:58:05.770 回答
1

你自己说这个。在您的第一个片段中,一个问题属于一个测验,一个测验有许多问题。但是如果你把它移到另一个模型,关系也会改变:现在一个问题属于许多测验,一个测验只有一个问题。因此,这取决于您要建立一对多关系的“多”侧的模型:具有 ForeignKey 字段的模型是“多”的模型。

于 2013-09-23T10:45:06.507 回答
0

外键只是一个单对多字段。

所以对于第一个片段,即

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)

您可以将一个问题标记为多个测验。

您的要求是“一个测验可以包含许多问题”,因此您应该使用第一个片段来完成。

如果您使用第二个片段来做,那么一个问题与您不想做的许多测验有关。

于 2013-09-23T11:38:53.060 回答