Django -> queryset[index] 索引超出范围
Posted
技术标签:
【中文标题】Django -> queryset[index] 索引超出范围【英文标题】:Django -> queryset[index] Index out of range 【发布时间】:2017-06-19 18:20:46 【问题描述】:我有一个包含 2663 个对象的查询集;当我尝试访问索引为 2662 的对象时,出现“索引超出范围”错误。我正在找人向我解释为什么会这样。
所以:
queryset = User_Answers.objects.all()\
.\
select_related('answer', 'answer__question',
'answer__question__admin',
'answer__question__category', 'mobile_user')\
.order_by('answer__question', 'mobile_user__id', 'order')
queryset.count() = 2663
有 2663 个对象;当我尝试获取索引为 2662 的对象时,我得到了这个:
queryset[2662]
-> IndexError列表索引超出范围
然后我检查一下:
queryset.last() == queryset[2661]
-> 返回真
这怎么可能?
【问题讨论】:
欢迎来到 Stack Overflow。请不要创建仅链接到错误屏幕截图的问题。有一个Minimal, Complete, Verifiable Examples的原则,以便人们可以帮助调查这个问题。另见How to ask。 请以适当的格式发布您的问题和所有相关信息。错误消息/回溯应该是文本而不是图像。 @KlausD。立即查看 对象#2662有什么特别之处?你到底想做什么? 【参考方案1】:来自order_by
的文档
在这里,每个事件可能有多个排序数据;每个具有多个子级的事件将多次返回到 order_by() 创建的新 QuerySet 中。 换句话说,在 QuerySet 上使用 order_by() 可能会返回比您开始工作时更多的项目 - 这可能既不预期也不有用。
因此,在使用多值字段对结果进行排序时要小心。如果您可以确定您订购的每件商品只有一个订购数据,那么这种方法应该不会出现问题。如果不是,请确保结果符合您的预期。
【讨论】:
以上是关于Django -> queryset[index] 索引超出范围的主要内容,如果未能解决你的问题,请参考以下文章