【问题标题】:Django - many to many forwards vs foreign keys backwardsDjango - 多对多转发与外键向后
【发布时间】:2025-12-10 03:35:01
【问题描述】:

考虑这两个例子:

示例 1:模型 A > 多对多 > 模型 B

class ModelA(models.Model):
    model_b = models.ManyToManyField('ModelB')

示例2:模型B>外键>模型A

class ModelB(models.Model):
    model_a = models.ForeignKey('ModelA')

除了要求/个人偏好之外,是否有理由选择其中之一?

是否有任何与此选择相关的重要考虑因素?

编辑: 外键不允许 modelB 有多个 modelA,但对于这个例子,我们假设这不是一个要求。

【问题讨论】:

  • 假设这不是必需的。 - 那么不要使用,foriegnkey 就足够了。

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


【解决方案1】:

当您实际上并不想要多对多关系时,为什么要选择 ManyToManyField?由于它们需要链接表,因此它们的效率明显低于作为表之间简单连接的 ForeignKey。除非您确实需要该功能,否则不要使用它们。

【讨论】:

    【解决方案2】:

    考虑到关系总是由第三个表表示,因此在一个表或另一个表上指定多对多关系并没有太大区别。

    您可能希望尝试一些代码示例,看看这两种表示是否能让您的代码更具可读性。

    【讨论】: