Вы можете просто включить это unpublish_date
в свои запросы, например:
articles_to_show = Articles.objects.filter(is_published=True,
unpublish_date__gt=datetime.date.today())
Это, вероятно, сделает ваш код более сложным.Вы должны были бы переписать все свои запросы, чтобы знать, что * Cron unpublish_date
.
работает для такого рода вещей, но подходит только для изменения вещей большими партиями один или несколько раз в день.Он плохо масштабируется, когда вам нужно выполнить большой пакет задач или вам нужно более детальное планирование.
Если достаточно запустить задачу через cron один раз в день, сделайте это.Возможно, стоит изучить более сложные параметры, такие как очереди сообщений.
Чтобы выполнить запланированное задание, которое будет выполняться в определенное время (при условии доступности рабочего), я бы использовал Celery .
from celery.decorators import task
@task
def unpublish(article_pk):
article = Article.objects.get(pk=article_pk)
article.is_published = False
article.save()
# Unpublish article in exactly 7 days from now
from datetime import datetime, timedelta
unpublish.apply_async([article.pk], eta=datetime.now() + datetime.timedelta(7))