Выполнение задачи Django во времени, указанное в поле модели datetime

У меня был простой вопрос, но я все равно застрял.

Скажем, у меня простая модель:

class myModel(models.Model): expires = models.DateTimeField(...) 

и я хочу, скажем, в указанное время что-то сделать: отправить электронное письмо, удалить модель, изменить некоторые поля моделей … Что-то. Есть ли инструмент в ядре django, позволяющий мне это сделать?

Или, если нет, я думаю, что может быть в порядке. У меня есть djcelery работающий в моем проекте, хотя я полностью новичок в нем, и все, что я смог выполнить до сих пор, – запустить пакет django-celery-email , чтобы отправить мою асинхронную почту. Хотя я не могу сказать, что я полностью способен определить задачу, а работники – работать в фоновом режиме и быть надежными.

Если какие-либо идеи, о том, как решить такую ​​проблему, пожалуйста, не стесняйтесь =)

3 Solutions collect form web for “Выполнение задачи Django во времени, указанное в поле модели datetime”

Я думаю, что лучше всего – фоновая задача, которая читает дату и выполняет задачу, если дата или время достигнуто.

См. Решение, данное здесь для запланированной задачи

Таким образом, рабочий процесс будет следующим:

  • Создайте задачу, которую вы хотите применить к объектам, дата которых была достигнута
  • Создайте команду управления, которая проверяет время в вашей базе данных и выполнит вышеуказанную задачу для каждого объекта, достигшего даты и времени
  • Используйте cron (Linux) или в (Windows) для планирования вызова команды
  1. Напишите пользовательскую команду управления для выполнения желаемой задачи. Когда вы закончите, вы сможете запустить свою задачу с помощью python manage.py yourtaskname .

  2. Используйте cron , at , периодические задания в celery , django-cron , djangotaskscheduler или django-future для планирования ваших задач.

Если вы используете UNIX-подобную машину, возможно, у вас есть доступ к cronjobs . Если вы работаете в Windows, я слышал, что есть программа, которая может делать подобные вещи. Если это не соответствует вашим потребностям, существует множество способов делать вещи каждые X часов, используя библиотеку time ( time.sleep(SOME_NUMBER_OF_SECONDS) в цикле с тем, что вы хотите сделать, сделаете это, если хотите что-то сделать регулярно, в противном случае вам нужно посмотреть time.localtime() и проверить условия).

  • Новичок: попытка понять, как приложения взаимодействуют в Django
  • Как сериализовать использование django rest_framework для ManyToManyFields со сквозной моделью
  • Сохранение изображения / файла через оболочку django
  • Модель Django задает внешний ключ для поля другой модели
  • Ошибка Django db: не удалось идентифицировать оператор равенства для типа json при попытке аннотировать модель с помощью jsonfield
  • django.db.utils.OperationalError независимо от того, что я пытаюсь
  • post_save в django для немедленного обновления экземпляра
  • Юг: выполните миграцию для столбца, который является как уникальным, так и недействительным
  • Python - лучший язык программирования в мире.