我有一个包含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]
- >返回True
怎么可能呢?
答案 0 :(得分:0)
来自order_by
这里,每个事件可能有多个订购数据;具有多个子节点的每个事件将多次返回到order_by()创建的新QuerySet中。 换句话说,在QuerySet上使用order_by()可能会返回比您开始时更多的项目 - 这可能既不是预期的也不是有用的。
因此,在使用多值字段对结果进行排序时要小心。如果您可以确定您订购的每个项目只有一个订购数据,则此方法不应出现问题。如果没有,请确保结果符合您的预期。