2011-04-02 85 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