python - Django: order_by ('?' ) 有奇怪的结果

标签 python django django-views

在 Django 外壳中:

>>> 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'

你看,最后两个输出相互矛盾。

最佳答案

尝试多次调用 a[0](或只是 a)。您会注意到它每次都会随机打乱元素。这是因为 a 指向 queryset,而不是 list

要理解为什么 queryset 每次都重新排序,想象一下这个场景:您需要按字母顺序从集合中获取所有元素。但是,元素会不断添加到集合中。如果每次您访问查询集时它们都没有按顺序放置,您就有可能让最近添加的元素出现乱序。

如果您想以随机顺序获取元素列表(而不是每次抓取元素时都让它们洗牌),您可以使用

a = list(queryset.order_by('?'))

关于python - Django: order_by ('?' ) 有奇怪的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35642550/

相关文章:

python - 类型错误 : 'class Meta' got invalid attribute(s): constraints

python - 替换大列表中的所有单词

django-compressor,heroku,s3 : Request has expired

django - 来自模型的初始表单数据 - Django

python - 在python3中找到一个字符串中有一个表情符号

python - 我认为 matplotlib 中的所有内容都是 QWidget。显然图不是。我的界面接受 QWidgets。该怎么办?

python - Django 查询 : How to filter objects by todays day, 时间和 30 分钟后?

使用 Jquery 的 Django ajax 'like' 按钮?

python - 使用旧数据库时 Django MultipleObjectsReturned

django - 具有当前实例 ID 的动态文件上传路径