在删除同一QuerySet中的对象时迭代Django QuerySet

时间:2013-05-09 16:50:39

标签: python django loops django-queryset

我想知道在删除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)

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

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

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

会奏效。但是,如果您正在进行无法在过滤器中进行的测试,那么您描述的方法可能是最佳的。