在django shell中:
>>> queryset = Song.objects.all()
>>> a=queryset.order_by('?')
>>> queryset
[<Song: Up All Night>, <Song: 1973>, <Song: The Luckiest>, <Song: Another Love>, <Song: Face the Sun>]
>>> a
[<Song: The Luckiest>, <Song: 1973>, <Song: Face the Sun>, <Song: Another Love>, <Song: Up All Night>]
>>> a[0].name
'1973'
你知道,最后两个输出相互矛盾。
答案 0 :(得分:1)
再次尝试拨打a[0]
(或只是a
)。您会注意到它每次都会随机地随机播放元素。这是因为a
指的是queryset
,而不是list
。
要理解每次queryset
重新排序的原因,请想象一下这个场景:您需要按字母顺序从集合中获取所有元素。但是,元素不断被添加到集合中。如果每次访问查询集时它们都没有按顺序排列,那么您最近添加的元素可能会出现故障。
如果您想以随机顺序获取元素列表(并且每次获取元素时都没有随机播放),您可以使用
a = list(queryset.order_by('?'))