我想知道在删除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)
答案 0 :(得分:3)
所以我想我已经回答了我自己的问题,如果有其他人好奇的话。我认为在迭代它们时删除对象时会出现问题,但事实并非如此。问题中的代码片段是正确的方法。
答案 1 :(得分:0)
Querysets有一个delete
方法,它将删除该查询集的所有结果。对于你给出的例子
toarchive.filter(date__gt=interval).delete()
会奏效。但是,如果您正在进行无法在过滤器中进行的测试,那么您描述的方法可能是最佳的。