2011-04-02 35 views
0

對Django來說是新手,所以很可能我做的這一切都是錯誤的。Django RelatedManager - 如何將兩個查詢集相互關聯?

我有一個Album類和一個Song類。 Album可以有許多Song。到目前爲止這麼簡單。

在我的專輯列表下面,我想要他們的歌曲列表。不是每個專輯都有一首歌曲(不要問),所以我不想只查詢Song模型並將其加入Album

我看了RelatedManager.add()但這並不做什麼,我希望:

a = Album.objects.order_by('-release_date')[:5] 
s = Song.objects.all() 
a.release_set.add(s) 

我得到這個錯誤:

'QuerySet' object has no attribute 'release_set' 

我這樣做對嗎?據我所知,我選擇了幾個Album s,選擇了所有的Song s,然後試圖將兩個藏品加在一起,他們共同擁有album_id

有沒有人知道更好的方法來做到這一點?

謝謝, 馬特

+0

AFAIK a必須是一個Album實例而不是QuerySet/list獲取一個專輯然後添加到它的歌曲。 – Jerzyk 2011-04-02 15:36:48

回答

2

呃,不。你在那裏的棍棒有錯誤的結局。

add用於將新歌曲項目與其專輯相關聯。如果您的歌曲已經有album_id的值,則它們已經與其專輯相關聯。你不需要做任何具體的加入。

albums = Album.objects.order_by('-release_date')[:5] 
for album in albums: 
    print album.song_set.all() 
+0

啊,所以我在*兩端*免費得到它,我明白了。我知道我可以在'Song'中做到這一點,因爲它具有明確的ManyToMany定義。謝謝,這就是我需要的! – 2011-04-02 15:40:11