2013-07-10 1 views
5

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

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

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

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

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

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

ответ

1

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

См Приведенное решение здесь для scheduled task

Так рабочий будет:

  • Создать задачу, которую вы хотите применить на объектах, дата была достигнута
  • Создать команду Managment, что проверяет время в вашей БД и выполняет вышеуказанную задачу для каждого объекта, достигшего даты и времени.
  • Используйте cron (Linux) или в (Windows), чтобы запланировать командный вызов
+0

это то, что я буду использовать, спасибо! –

-1

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

 Смежные вопросы

  • Нет связанных вопросов^_^