在我的django项目中,我想自动删除超过10天的数据。
我该如何编写此视图?它如何自动执行?
在我的模型中有一个post_date
字段,我想检查它是否已有10天。
model.py:
class CustomerLeads(models.Model):
title = models.CharField(max_length=100, null=True, blank=True)
budget = models.IntegerField(default=0,null=True, blank=True)
posting_date = models.CharField(max_length=300,null=True, blank=True)
quantity = models.IntegerField(default=1,null=True, blank=True)
我如何获得差异。我从当前日期和发布日期值中获得2016-12-15 <type 'datetime.date'>
是12-Dec-2016 <type 'unicode'>
预先感谢。
做到这一点的好方法是在django链接中使用管理命令功能。
在Python文件中写下您的代码,然后将其放入Cron中以每天在某些时候运行。在该程序中,寻找超过10天的对象并将其删除用于您的用例。
您无法获得不同日子的原因是因为您使用字符字段将当前日期和时间存储在代码中。将posting_date
变量的字段类型从CharField
更改为DateTimeField
。链接
posting_date = models.DateTimeField(auto_now_add=True)
添加管理程序。这样就是这样:
# purge_old_data.py
from django.core.management.base import BaseCommand, CommandError
from cus_leads.models import CustomerLeads
from datetime import datetime, timedelta
class Command(BaseCommand):
help = 'Delete objects older than 10 days'
def handle(self, *args, **options):
CustomerLeads.objects.filter(posting_date__lte=datetime.now()-timedelta(days=10)).delete()
self.stdout.write('Deleted objects older than 10 days')
如何运行此命令:
python <code_base>/manage.py purge_old_data --settings=<code_base>.settings.<env>
项目结构我假设:
cus_leads/
__init__.py
models.py
management/
__init__.py
commands/
__init__.py
purge_old_data.py
tests.py
views.py
- 但是,我建议您不要删除对象。宁愿添加一个iS_DEATER的字段,并在10天后将其设置为True。这将帮助您进行分析。
也 @e4c5指出:
您应该将其删除或移至档案桌,因为布尔值列无法有效地索引,这将减慢随着时间的流逝,您的DB。
如果您在UNIX系统上使用crontab,这是一种简单有效的方法来自动化任务,然后编写一个Python脚本(在您的项目中),该脚本将导入您的模型并为您完成工作,使用DateTime检查最近的X天。
然后像在Unix shell中称其为crontab。
提示:您可以在项目中放置一个带有所有任务的crontab文件,然后将其复制或sym链接到/etc/cron.d