为什么Django认为这两个相同的查询集是不同的?

2024-04-24 23:26:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个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

这将输出两个具有相同查询集结果的重复集。你知道吗

[<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不能区分这两个查询集?你知道吗


Tags: nameinforifobjectssonggroupdj
1条回答
网友
1楼 · 发布于 2024-04-24 23:26:48

查看Querysetsource code我找不到任何__eq__方法,所以在比较Queryset的两个不同实例时找不到任何匹配项。你知道吗

>>> class A(object):
    pass

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

docs

If no __cmp__(), __eq__() or __ne__() operation is defined, class instances are compared by object identity (“address”).

相关问题 更多 >