2016-09-26 86 views
-3

我有两个Django模型,可以说一个Album和一个Song模型。任何人都可以只使用ForeignKey在两个django模型之间做多对多的关系吗?

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

感谢

回答

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 S和副反之亦然,如你所愿。

+0

我同意你的意见,但如果我更改了数据库的模式呢?也许那么我可以成功与多个关系只有ForeignKey字段 – jimao

+0

@jimao它是什么意思,*改变我的数据库的架构*?如果这意味着将FK更改为M2M,那么是的,但我没有看到任何帮助您用单个FK代表这种关系的变化。 – SpiXel

+0

正如数据库中的规范化和非规范化技术一样 – jimao

相关问题