11

Queryset 内のオブジェクトを削除しながら、Django QuerySet を反復処理する最良の方法は何ですか? たとえば、特定の時間のエントリを含むログ テーブルがあり、5 分ごとにエントリが 1 つを超えないようにアーカイブしたいとします。私はこれが間違っているかもしれないことを知っていますが、これは私がしようとしていることのようなものです:

toarchive = Log.objects.all().order_by("-date")
start = toarchive[0].date
interval = start - datetime.timedelta(minutes=5)
for entry in toarchive[1:]:        
    if entry.date > interval:
        entry.delete()
    else:
        interval = entry.date - datetime.timedelta(minutes=5)
4

2 に答える 2

1

クエリセットには、そのクエリセットdeleteのすべての結果を削除するメソッドがあります。あなたが与えた例について

toarchive.filter(date__gt=interval).delete()

動作します。ただし、フィルターで実行できないテストを実行している場合は、説明した方法がおそらく最適です。

于 2013-05-09T17:11:16.770 に答える