Python: Цитата дня

Python: Django ORM
Обновлено: 09 июня, 19:37
19
Студентов
73%
Завершения

django_project/app/models.py

Модель Quote описывает сборник цитат из произведений массовой культуры. Вам нужно научиться выбирать "цитату дня" с помощью метода класса of_the_day():

print(f'"{Quote.of_the_day().text}"\n- {Quote.of_the_day().source}')
# => "Try not. Do, or do not. There is no try."
# => - Yoda, The Empire Strikes Back

Метод Quote.of_the_day() должен выбирать цитаты так, чтобы все они показывались одинаково часто. Это означает, что при наличии в базе n цитат, каждая должна появляться ровно один раз на каждые n последовательных выборов.

Опция key метода Quote.of_the_day() диктует методу, какую по номеру цитату выбрать среди тех, которые в данный момент доступны. Значением опции выступает функция, принимающая число доступных элементов (int) и возвращающая индекс элемента. Например, аргумент key=lambda _: 0 будет всегда выбирать первую среди доступных, а значит цитаты будут следовать одна за другой по кругу. Если опция не указана, то выбирается случайная среди доступных с помощью функции random_one().

Чтобы при подсчёте количества доступных цитат и выборе среди них нужной порядок был постоянным, сортируйте цитаты по id. Так как отслеживание того, что и когда было показано, требует наличия некоторого глобального состояния, вам будут нужны дополнительные поля в модели. Добавьте их и сгенерируйте миграцию.

Для полного доступа к испытанию нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
900
упражнений
2000+
часов теории
3200
тестов