Рубрики
Без рубрики

Как реализовать разбиение на страницы в наборе запросов Django с использованием лимита и смещения?

Django использует синтаксис среза массива python для реализации смещения предела. Предположим, у вас есть 20 строк в наборе запросов, и вы хотите получить доступ к данным в пакетах по 5. first_five_rows =…

Автор оригинала: Arghya Saha.

Django использует синтаксис среза массива python для реализации limit offset. Предположим, у вас есть 20 строк в наборе запросов, и вы хотите получить доступ к данным в пакетах по 5.

first_five_rows.objects.all()[:5]

Чтобы получить доступ к строкам от 10 до 15, вы можете использовать что-то вроде этого

next_next_five_rows.objects.all()[10:15]

Синтаксис: [OFFSET:OFFSET+LIMIT] где offset-это количество строк, которые мы хотим пропустить, а limit-общее количество строк, которые мы хотим получить.

Model.objects.all()[СМЕЩЕНИЕ:СМЕЩЕНИЕ+ПРЕДЕЛ]

Несколько моментов, которые вы должны иметь в виду при использовании разбиения на страницы django с использованием смещения предела набора запросов:

  • Отрицательная индексация не работает. Model.objects.all()[-1] недопустимо
  • Нарезка набора запросов возвращает новый набор запросов, который не возвращает эквивалентный запрос.
  • Нарезка также может использоваться с шагами Model.objects.all()[:10:2] вернет каждый второй объект для первых 10 элементов.
  • После того, как вы выполняете нарезку, запрещено выполнять фильтрацию или упорядочивание из-за неоднозначного характера выходных данных.
  • Если вы хотите получить только один элемент, лучше всего использовать .first() или .last () , так как запрос среза Model.objects.filter(name='John')[0] может дать вам IndexError если запрос фильтра возвращает пустой список.

Подробнее вы можете прочитать в официальной документации

Эта статья впервые появилась на TL DR Tech .