我有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
无法区分这两个查询集?
答案 0 :(得分:0)
查看Queryset
的{{3}}我找不到任何__eq__
方法,这就是为什么当您比较两个不同的Queryset
实例时没有找到任何匹配。
>>> class A(object):
pass
>>> A() == A()
False
>>> A() in [A()]
False
来自source code:
如果未定义
__cmp__()
,__eq__()
或__ne__()
操作,则为class 实例按对象标识(“地址”)进行比较。