任何人都可以仅使用 ForeignKey 在两个 django 模型之间建立多对多关系吗?

Can anyone do a many to many relationship between two django models only with the ForeignKey?

我有两个 Django 模型,假设一个 Album 和一个 Song 模型。

我的 Song 模型有一个 ForeignKey 字段,因此我可以将多首歌曲关联到一个 Album(多对一关系)。如果我不改变我的模型中的任何东西并让它们保持原样,如果我改变我的数据库存储数据的方式(规范化,非规范化等),我可以成功建立多对多关系(同一首歌到不同的专辑,反之亦然) )?

谢谢

不,你不能,这就是 Django 支持中间表和 ManyToMany relationship 的原因。

其实考虑到你的模型如下:

class Song(models.Model):
    album = FK(Album)

class Album(models.Model):
    attributes ...

您有足够的表现力来存储多首歌曲 一张专辑。您 不能 每首歌曲有多个专辑。

ForeignKey 放在 Album class 中只会让事情变得更糟,因为每首歌可以有几张专辑,而每张专辑都属于一首歌曲! (这绝对是错误的吧?)

所以你想要的是 ManyToMany relationship,介于 AlbumSong 之间,如下所示:

class Song(models.Model):
    attributes ...

class Album(models.Model):
    songs = models.ManyToManyField(Song)

这样,每个 Song 都属于几个 Album,反之亦然,如您所愿。