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.