2014-08-28 94 views
0

我有2个Django模型 - DJ和歌曲。我试图为特定的DJ获得所有具有相同名称的歌曲集。为什么Django将这两个相同的查询集视为不同?

这就是我正在做的是

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 

此输出2套重复使用相同的查询集的结果。

[<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>] 

为什么not in无法区分这两个查询集?

回答

0

望着Querysetsource code我找不到任何__eq__方法,所以这就是为什么当你比较Queryset两种不同的情况下,你没有找到任何匹配。

>>> class A(object): 
    pass 

>>> A() == A() 
False 
>>> A() in [A()] 
False 

docs

如果没有__cmp__()__eq__()__ne__()操作被定义,类 实例由对象标识进行比较(“地址”)。

相关问题