Django Academy · Урок

order_by, срезы и ленивая обработка

Сортируйте, ограничивайте результаты и узнавайте, когда запросы обращаются к DB

Урок 3 из 413 шагов

«order_by, срезы и ленивая обработка» — бесплатный урок Django Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Django Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Django Academy содержит 4 уроков всего.

Упорядочить строки

У строк базы данных нет гарантированного порядка. Вызовите order_by(), чтобы отсортировать QuerySet по выбранному полю.

Book.objects.order_by("title")

Сортировка по убыванию

Поставьте знак минус перед именем поля, чтобы изменить порядок и вывести сначала самое большое или самое новое значение.

Book.objects.order_by("-year")

Сортировка по нескольким полям

Передайте несколько полей в order_by(), и Django отсортирует данные сначала по первому полю, а при совпадении значений — по следующему.

Book.objects.order_by("author", "-year")

Взять первые несколько

Срез QuerySet с помощью синтаксиса Python ограничивает количество получаемых строк — это отлично подходит для списка из пяти лучших результатов.

Book.objects.order_by("-year")[:5]

Выбрать фрагмент

Укажите начало и конец среза, чтобы получить фрагмент из середины. Django самостоятельно преобразует это в LIMIT и OFFSET. ✂️

Book.objects.all()[10:20]

Отрицательные срезы запрещены

Нельзя использовать отрицательный индекс для QuerySet. Чтобы получить последние строки, сначала измените порядок, а затем примените срез.

Book.objects.order_by("-id")[:1]

Запросы выполняются лениво

Создание QuerySet не обращается к базе данных. Django сохраняет ленивое выполнение и ждёт, пока данные действительно не понадобятся.

qs = Book.objects.filter(published=True)

Что запускает запрос

Вычисление происходит, когда Вы проходите по результатам в цикле, вызываете list() или проверяете длину. Именно в этот момент наконец выполняется SQL-запрос.

for book in qs:
    print(book.title)

Создать сейчас, выполнить позже

Ленивое выполнение позволяет объединять фильтры в цепочку на протяжении нескольких строк, а Django всё равно отправляет в конце только один объединённый запрос.

qs = Book.objects.filter(year__gte=2020).order_by("title")

Кэширование результатов

После вычисления QuerySet Django кэширует строки. Повторное использование той же переменной позволяет не обращаться к базе данных дважды.

Срез сохраняет ленивость

Невычисленный срез всё ещё является ленивым, поэтому LIMIT добавляется в SQL, а строки не обрезаются в Python.

top = Book.objects.order_by("-year")[:3]

Быстрая проверка

Вы создали отфильтрованный QuerySet, но не проходите по нему в цикле и не преобразуете его в список. Когда выполняется SQL-запрос?

Повторение

У Вас получилось! order_by() сортирует, срез ограничивает строки на уровне SQL, а ленивое вычисление означает, что запросы выполняются только при использовании. ⚡

Можно начать бесплатно

Изучай Python с ИИ-репетитором — бесплатно

Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.

Курсы
30
Уроки
120

Часто задаваемые вопросы

Урок «order_by, срезы и ленивая обработка» бесплатный?

Да — полный текст урока «order_by, срезы и ленивая обработка» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Django Academy, подпишись на CoddyKit PRO. Курс Django Academy содержит 4 уроков всего.

Чему я научусь в уроке «order_by, срезы и ленивая обработка»?

Сортируйте, ограничивайте результаты и узнавайте, когда запросы обращаются к DB Ты практикуешь Django Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Django Academy?

Предыдущий опыт не требуется. Django Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «order_by, срезы и ленивая обработка»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Django Academy?

Да. Каждый урок Django Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. all(), get() и filter()
  2. Поиск по полям и exclude()
  3. order_by, срезы и ленивая обработка
  4. values, values_list и count
← Назад к Django Academy