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

5

所以我想我已经回答了我自己的问题,如果其他人好奇的话。我认为在迭代对象时删除对象会出现问题,但没有。问题中的代码片段是正确的方法。

于 2013-05-10T14:25:22.200 回答
1

查询集有一个delete方法可以删除该查询集的所有结果。对于你给出的例子

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

将工作。但是,如果您正在执行无法在过滤器中完成的测试,那么您描述的方法可能是最好的。

于 2013-05-09T17:11:16.770 回答