在django中自动删除超过10天的数据

时间:2016-12-15 10:50:28

标签: python django

在我的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'>

提前致谢。

2 个答案:

答案 0 :(得分:2)

执行此操作的一种好方法是在django Link中使用管理命令功能。

在python文件中编写代码并将其放在cron中,以便在特定时间每天运行。在程序中查找超过10天的对象并删除它们用于您的用例。

dateiff不适合您的原因是因为您使用字符字段在代码中存储当前日期时间。将posting_date的字段类型更改为django datetime字段。 Link

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__gte=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_deleted,并在10天后将其设置为true。这将有助于您进行分析。

另外@ e4c5指出:

  

您应该删除它或移动到归档表,因为布尔值   列无法有效索引,这将减慢速度   你的数据库随着时间的推移。

答案 1 :(得分:1)

如果你在Unix系统上使用crontab这是一种简单而有效的方法来自动执行任务,然后编写一个python脚本(在你的项目中),它将导入你的模型并为你做工作,使用日期时间检查从今天起的最后X天。

然后在crontab中调用它,就像在Unix shell中调用它一样。

提示:您可以将包含所有任务的crontab文件放入项目中,然后将其复制或sym link it复制到/etc/cron.d