Menu
CoddyTech

Сортировка записей

Часть раздела Модели и панель администратора путешествия по Django на Coddy. Урок 11 из 23.

Поиск самой дешёвой книги, самой новой или всех названий от самых старых к самым новым — всё это сначала требует сортировки книг. order_by() сортирует один QuerySet по полю, как это делает ordering в Meta для всех объектов, а знак минус задаёт сортировку от большего к меньшему. first() возвращает первую строку или None, если строк нет, поэтому, в отличие от get(), никогда не вызывает исключение:

Book.objects.order_by("-year").first()   # <Book: SPQR by Mary Beard>
Book.objects.order_by("-price").values_list("author", flat=True)
# <QuerySet ['Mary Beard', 'Umberto Eco', ...]>

values_list("author", flat=True) пропускает объекты Book и возвращает сами значения: 'Mary Beard'. Без flat=True каждое значение возвращается в кортеже из одного элемента: ('Mary Beard',).

challenge icon

Задание

Средне

Перепиши explore.py, чтобы вывести две строки:

  1. Cheapest: и название самой дешёвой книги.
  2. Titles by year: и список всех названий, начиная с самой старой книги. Выведи сам список.

Нажми «Играть»: в консоли появится Cheapest: Pride and Prejudice, а затем Titles by year: ['Pride and Prejudice', 'Emma', 'The Murder of Roger Ackroyd', 'The Hobbit', 'Foundation', 'Dune', 'The Name of the Rose', 'Neuromancer', 'SPQR'].

Попробуйте сами

from books.models import Book

# 1. Самая дешёвая: название самой дешёвой книги

# 2. Названия по годам: названия всех книг в виде списка, начиная с самой старой

Все уроки раздела Модели и панель администратора

Потренируйтесь самостоятельно: Песочница Django