2016-12-15 27 views
4

私のdjangoプロジェクトでは、10日以上経過したデータを自動削除したいと思います。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'>

ありがとうございます。

+0

あなたのdiff日/etc/cron.dするためにそれをコピーしたり、sym link itが動作していません。それを動作させるためにdatefieldに変更してください。詳細は –

答えて

0

これを行う良い方法は、django Linkの管理コマンド機能を使用することです。

Pythonファイルでコードを記述し、特定の時刻に毎日実行するようにcronに入れてください。プログラムでは、10日以上経過したオブジェクトを探してユースケースのために削除します。

あなたのコードに現在のdatetimeを格納するために文字フィールドを使用しているため、datediffがうまく動作しないのはなぜですか。 posting_dateのフィールドタイプをdjango datetimeフィールドに変更します。 Link

posting_date = models.DateTimeField(auto_now_add=True) 

管理プログラムを追加します。これはこのようなものになるだろう:私は想定しています

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 

- を私がないようにあなたをお勧めしますただし、このコマンドを実行する方法

# 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') 

オブジェクトを削除します。むしろ、フィールドをis_deletedとして追加し、それを10日後にtrueに設定するだけです。これは分析に役立ちます。そのうち

また@ e4c5ポインタ:

あなたはそれを削除したり、ブール 列が効果的にインデックスを作成することができないため、アーカイブテーブルに移動する必要があり、これは時間をかけ あなたのDBを遅くしようとしています。

+0

私の答えを参照してくださいそれを削除するか、またはアーカイブテーブルに移動する必要がありますブール列は効果的にインデックスを付けることができないため、これはあなたのDB時間をかけて減速する予定です。 – e4c5

+0

@ e4c5整数フィールドis_deletedを1/0として追加すると動作しますか? –

+0

はブール値とまったく同じですが、3バイトの余分なスペースをとります – e4c5

1

あなたがUnixシステムの使用crontab上にある場合、それは最後の日時の確認を使用して、あなたのモデルをインポートし、あなたのための作業を行います(プロジェクト内)Pythonスクリプトを記述し、タスクを自動化するための簡単かつ効率的な方法です今日からX日。

その後、UNIXシェルで呼び出すようにcrontabで呼び出します。

ヒント:モデル内のposting_dateは、char型のフィールドであるので、あなたのプロジェクトのすべてのタスクとのcrontabファイルを置くことができ、その後

関連する問題