2015-07-02 78 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