2015-07-02 137 views
0

有沒有辦法在建立後的指定時間內刪除模型?基本上,我想只保留24小時的模型,以便在達到此持續時間後到期。Django計劃刪除

+0

記住,我不想通過時間字段進行篩選。我想實際刪除。 –

+0

是否必須立即刪除它,還是將其保留爲活動狀態,但標記爲刪除,並且每天要將腳本清理乾淨並清理N次? – NightShadeQueen

+0

我想立即刪除。 –

回答

2

只需創建一個celery任務即可刪除模型。使用post-save信號處理程序爲模型觸發芹菜刪除任務(延遲24小時)(當createdTrue時)。


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