【问题标题】:Django -> queryset[index] Index out of rangeDjango -> queryset[index] 索引超出范围
【发布时间】: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有什么特别之处?你到底想做什么?

标签: python django


【解决方案1】:

来自order_by 的文档

在这里,每个事件可能有多个排序数据;每个具有多个子级的事件将多次返回到 order_by() 创建的新 QuerySet 中。 换句话说,在 QuerySet 上使用 order_by() 可能会返回比您开始工作时更多的项目 - 这可能既不预期也不有用。

因此,在使用多值字段对结果进行排序时要小心。如果您可以确定您订购的每件商品只有一个订购数据,那么这种方法应该不会出现问题。如果不是,请确保结果符合您的预期。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-12
    • 1970-01-01
    • 1970-01-01
    • 2018-03-01
    • 1970-01-01
    相关资源
    最近更新 更多