Django сохраняет модель каждый день

У меня есть модель и сигнал в models.py, и эта модель посылает сообщение в discord webhook с информацией о том, сколько дней осталось до чего-то. Я хочу обновлять его каждый день в 12:00 утра автоматически без использования django-celery, потому что он у меня не работает. Я планирую сделать что-то вроде этого

time_set = 12

if time_set == timezone.now().hour:
   ...save model instances...

но я совершенно не знаю, как это сделать. И я хочу сделать это таким образом, потому что при сохранении экземпляра модели запускается сигнал

Django не поддерживает этот сценарий из коробки, поэтому необходим celery и ему подобные. Самый простой способ - установить запланированную задачу в операционной системе, которая вызывает пользовательскую команду управления django (которая по сути является скриптом на python, который может ссылаться на ваши модели и методы django и т.д., вызывая python manage.py myNewCommand).

Подробнее о пользовательских командах вы можете узнать на https://docs.djangoproject.com/en/4.0/howto/custom-management-commands/

Вы можете создать настраиваемую команду управления и вызывать ее с помощью записи cron, установленной на выполнение каждый день.

Просмотрите официальную документацию Django для получения инструкций по созданию пользовательской команды.

Вместо того, чтобы каждый раз вызывать метод save(), я бы создал send_discord_message() в модели и вызывал его везде, где это необходимо. Если вам нужно выполнять его каждый раз при сохранении экземпляра, то предпочтительнее использовать переопределенный метод save() в модели. Сигналы - отличный способ соединить и расширить различные приложения, но у них есть некоторые недостатки, и проще переопределить метод save().

Предполагаю, что вы используете Unix-подобную систему. Вы можете посмотреть как настроить и создать задания cron.

Вернуться на верх