2015-07-02 2 views
0

Есть ли способ удалить модель после определенного количества времени с момента создания? В принципе, я хочу сохранить модель всего лишь на двадцать четыре часа, чтобы она закончилась после того, как эта продолжительность была достигнута.Django Scheduled Deletion

+0

Имейте в виду, что я не хочу, чтобы фильтровать по полям времени. Я хочу удалить. –

+0

Нужно ли его немедленно удалить или было бы хорошо оставить его в живых, но помечено для удаления, и просто нужно выполнить скрипт и очистить вещи до N раз в день? – NightShadeQueen

+0

Я хотел бы удалить сразу. –

ответ

2

Просто создайте задачу celery, чтобы удалить модель. Используйте обработчик сигнала post-save для запуска задачи удаления сельдерея (с задержкой в ​​24 часа) для модели (когда created - True).


from celery import shared_task 

@shared_task 
def delete_model(model_pk): 
    try: 
     MyModel.objects.get(pk=model_pk).delete() 
    except MyModel.DoesNotExist: 
     pass 

from django.dispatch import receiver 
from django.db.models.signals import post_save 
from datetime import datetime, timedelta 

@receiver(post_save, sender=MyModel) 
def model_expiration(sender, instance, created, **kwargs): 
    if created: 
     delete_model.apply_async(
      args=(instance.pk,), 
      eta=datetime.utcnow() + timedelta(hours=24) 
     ) 
+0

Я не знаком с сельдереем или как интегрировать его с моделью. Не могли бы вы включить образец кода? –

+0

['celery'] (http://celery.readthedocs.org/en/latest/) - очень зрелый и хорошо документированный инструмент, который вам понравится. – dgel