Python: Цитата дня

Python: Django ORM
Обновлено: 07 янв., 15:36
8
Студентов
87%
Завершения

django_project/app/models.py

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

>>> print('"{0.text}"\n- {0.source}'.format(Quote.of_the_day()))
"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
тестов