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

时间:2016-09-26 19:03:48

标签: django foreign-keys models

我有两个Django模型,比如说AlbumSong模型。

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

由于

1 个答案:

答案 0 :(得分:1)

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

事实上,考虑到你的模型如下:

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

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

您有足够的代表能力为一张专辑存储多首歌 每首歌不能 多张专辑。

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

所以你想要的是一个ManyToMany relationship,在AlbumSong之间,如下所示:

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

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

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