2017-02-02 4 views
-5

У меня есть запрос, содержащий 2663 объекта; когда я пытаюсь получить доступ к объектам с индексом 2662, я получаю ошибку «индекс вне диапазона». Я ищу кого-то, кто объяснит мне, почему это происходит.Django -> queryset [index] Индекс за пределами допустимого диапазона

Итак:

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] -> возвращает Правда

Как это возможно?

+0

Добро пожаловать в Переполнение стека. Пожалуйста, не создавайте вопрос, который просто ссылается на скриншот ошибки. Существует принцип [Минимальные, завершенные, проверенные примеры] (http://stackoverflow.com/help/mcve), чтобы люди могли помочь расследовать эту проблему. Также см. [Как спросить] (http://stackoverflow.com/help/how-to-ask). – roganjosh

+0

Пожалуйста, разместите свой вопрос и всю соответствующую информацию в соответствующем формате. Ожидается, что сообщение об ошибке/трассировке будет не текстовым, а текстовым. –

+0

@KlausD. check now –

ответ

0

Из документов для order_by

Здесь есть потенциально может быть несколько заказных данных для каждого случая; каждое событие с несколькими дочерними элементами будет возвращено несколько раз в новый QuerySet, создаваемый order_by(). Другими словами, использование order_by() в QuerySet может вернуть больше элементов, чем вы начали, что, вероятно, не является ни ожидаемым, ни полезным.

Таким образом, будьте внимательны при использовании многозначного поля для заказа результатов. Если вы можете быть уверены, что для каждого из предметов, которые вы заказываете, будет только один заказ данных, этот подход не должен представлять проблем. Если нет, убедитесь, что результаты - это то, что вы ожидаете.

Смежные вопросы