为什么Django将这两个相同的查询集视为不同?

时间:2014-08-28 20:39:15

标签: python django

我有2个Django模特 - DJ和歌曲。我正在尝试为特定的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

这将输出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无法区分这两个查询集?

1 个答案:

答案 0 :(得分:0)

查看Queryset的{​​{3}}我找不到任何__eq__方法,这就是为什么当您比较两个不同的Queryset实例时没有找到任何匹配。

>>> class A(object):
    pass

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

来自source code

  

如果未定义__cmp__()__eq__()__ne__()操作,则为class   实例按对象标识(“地址”)进行比较。