2014-08-31 132 views
0

我有2个Django模型 - DJ和歌曲。如何从Django的一组查询集中获取不同的查询集?

class DJ(models.Model):  
    name = models.CharField(max_length=50, unique=True) 
    rank = models.IntegerField() 

class Song(models.Model): 
    song_id = models.IntegerField() 
    name = models.CharField(max_length=150) 
    artist = models.ForeignKey(DJ, default=None, blank=True, null=True) 
    release = models.CharField(max_length=500, default=None, blank=True, null=True) 
    release_date = models.DateField() 
    duplicate = models.BooleanField(default=False) 

我试图获得具有相同名称的特定DJ的所有歌曲集。

这就是我正在做的是

for dj in DJ.objects.all(): 
    song_group_list = [] 
    dj_song_list = Song.objects.filter(artist=dj) 
    for song in dj_song_list: 
     song_group = dj_song_list.filter(name=song.name).order_by('song_id') 
     if len(song_group) > 1: 
      if song_group not in song_group_list: 
       song_group_list.append(song_group) 
    for group in song_group_list: 
     print group 

此输出复制集具有相同的查询集的结果。

[<Song: Ping Pong>, <Song: Ping Pong>, <Song: Ping Pong>] 
[<Song: Everybody Is In The Place>, <Song: Everybody Is In The Place>, <Song: Everybody Is In The Place>] 
[<Song: Jumper>, <Song: Jumper>, <Song: Jumper>] 
[<Song: Man With The Red Face>, <Song: Man With The Red Face>, <Song: Man With The Red Face>, <Song: Man With The Red Face>, <Song: Man With The Red Face>, <Song: Man With the Red Face>] 
[<Song: Wake Up>, <Song: Wake Up>, <Song: Wake Up>, <Song: Wake Up>, <Song: Wake Up>, <Song: Wake Up>, <Song: Wake Up>, <Song: Wake Up>, <Song: Wake Up>, <Song: Wake Up>, <Song: Wake Up>, <Song: Wake Up>, <Song: Wake Up>, <Song: Wake Up>, <Song: Wake Up>, <Song: Wake Up>, <Song: Wake Up>, <Song: Wake Up>] 
[<Song: Wake Up>, <Song: Wake Up>, <Song: Wake Up>, <Song: Wake Up>, <Song: Wake Up>, <Song: Wake Up>, <Song: Wake Up>, <Song: Wake Up>, <Song: Wake Up>, <Song: Wake Up>, <Song: Wake Up>, <Song: Wake Up>, <Song: Wake Up>, <Song: Wake Up>, <Song: Wake Up>, <Song: Wake Up>, <Song: Wake Up>, <Song: Wake Up>] 

如何才能获得上述问题的不同查询集?

+0

你能解释一下你想要的吗? – Kasramvd 2014-08-31 09:43:03

+0

@Kasra我的DJ模型有重名歌曲(但其他字段不同)。我正在试着为特定的DJ获得同名歌曲。 – 2014-08-31 10:05:05

+0

你可以添加你的dj模型到你的问题吗? – Kasramvd 2014-08-31 10:59:11

回答

0

我认为这个问题是因为append方法,因为,首先你会得到所有操作系统的SongList然后才能将其追加到song_list所以你必须替换当前列表与有序列表:

所以更改您的代码:

for dj in DJ.objects.all(): 
    song_group_list = [] 
    dj_song_list = Song.objects.filter(artist=dj) 
    for song in dj_song_list: 
     song_group = dj_song_list.filter(name=song.name).order_by('song_id') 
     if len(song_group) > 1 and (song_group not in song_group_list): 
       song_group_list=song_group 
    for group in song_group_list: 
     print group