FFSinit
@FFSinit

Как обновить дату в поле модели django при смене текущего года?

В общем суть проблемы: есть модель с несколькими полями на основе которых метод модели date() генерирует дату уникальную для каждого года, записывает в поле temp_date и в следующий раз вместо генерации и записи сначала проверит совпадает ли год в temp_date с сегодняшней датой. Если год отличается — тоже генерируем и записываем, если нет — отдаём содержимое temp_date. Выглядит не очень красиво, но меня это устраивало до тех пор пока не возникла необходимость сортировать queryset по этой дате. Т.к. date() это метод модели, а в temp_date может быть не актуальная информация, использовать order_by() не выйдет.
Возникла идея перезаписывать temp_date исключительно по событию, а именно — смена даты на 1 января. Это решает все проблемы, в temp_date содержится актуальная дата и можно использовать order_by().
Не хотелось бы писать management команду и вешать её на крон для этой цели, у нас ведь приложение постоянно в памяти находится.
Как это реализовать?
Или может есть какие-то альтернативные варианты решения проблемы? Просто очень нужно order_by() а не sorted() для сортировки.
  • Вопрос задан
  • 571 просмотр
Решения вопроса 1
Обновлять по крону - это красивое решение. У вас дата очень напрашивается быть в БД и работать с миром как обычное поле. Как я понимаю, хранится она долго, создается при сохранении объекта модели, обновляется раз в год. Здесь не нужен метод, который проверяет ее актуальность, потому что вам эта проверка не нужна подавляющее большинство времени. Должен быть просто метод, заполняющий дату и ничего больше не делающий. Тем более, если после 1 января у вас будет пик посещений, вы получите дополнительную нагрузку на БД, плюс еще и неактуальные в ней данные останутся. Привязывать обновление данных к запросу нехорошо. Гораздо лучше крон, который сделает ее актуальной незаметно в 4:03 утра 1 января для всех сразу.

Если бы это была быстро меняющаяся информация, то тогда подобный метод + кэш были бы кстати.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@deliro
Использовать кэш вместо temp_date?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы