django_project/app/models.py
Модель Quote
описывает сборник цитат из произведений массовой культуры. Вам нужно научиться выбирать "цитату дня" с помощью метода класса of_the_day()
:
quote = Quote.of_the_day()
print(f'"{quote.text}"\n- {quote.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. Так как отслеживание того, что и когда было показано, требует наличия некоторого глобального состояния, вам будут нужны дополнительные поля в модели. Добавьте их и сгенерируйте миграцию.
Для полного доступа к испытанию нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.