任何人都可以仅使用 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,介于 Album
和 Song
之间,如下所示:
class Song(models.Model):
attributes ...
class Album(models.Model):
songs = models.ManyToManyField(Song)
这样,每个 Song
都属于几个 Album
,反之亦然,如您所愿。
我有两个 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,介于 Album
和 Song
之间,如下所示:
class Song(models.Model):
attributes ...
class Album(models.Model):
songs = models.ManyToManyField(Song)
这样,每个 Song
都属于几个 Album
,反之亦然,如您所愿。