何时在ForeignKey上使用ManyToMany字段?

时间:2016-03-12 19:20:33

标签: django django-models foreign-keys many-to-many

考虑一下我们有两个Django模型,问答。 一个问题可以有很多答案,但答案只能有一个与之相关的问题。 我们可以将关系建模为:

class Question(models.Model):
    text     = models.CharField(...)
    answers  = models.ManyToManyField('Answer')

class Answer(models.Model):
    text     = models.CharField(...)

我们也可以将其建模为:

class Question(models.Model):
    text     = models.CharField(...)

class Answer(models.Model):
    text     = models.CharField(...)
    question = models.ForeignKey('Question')

Django经理允许我们向后关注ForeignKey和ManyToManyField。 我们应该使用什么样的模型结构?

2 个答案:

答案 0 :(得分:1)

one-to-many当然。你可以使用多对多关系来实现同样的目标,但是你会使事情变得复杂并且你会为性能打击付出代价。

从数据库建模的角度考虑它(忘记ORM)。您为什么要这样做:question -> many-to-many-manager -> answers而不是:question -> answers

答案 1 :(得分:1)

class Question(models.Model):
    text     = models.CharField(...)
    answers  = models.ManyToManyField('Answer')

上述模型说,答案可以有很多问题,而问题可以有很多答案。 部分错误和部分正确。

  

多对多关系:您有很多兄弟姐妹,并且您的一个   兄弟姐妹有很多兄弟姐妹。

class Answer(models.Model):
    text     = models.CharField(...)
    question = models.ForeignKey('Question')

现在,此模型表明,问题可以有多个答案,而答案只能有一个问题。

  

一对多关系:一个人可以有很多数字,但是不能将一个数字分配给很多人

我认为这更正确。