2016-09-26 29 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

相關問題