use*_*866 9 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)
Run Code Online (Sandbox Code Playgroud)
所以我想如果其他人好奇的话,我已经通过提问回答了我自己的问题。我认为在迭代对象时删除对象时会出现问题,但事实并非如此。问题中的代码片段是正确的方法。
查询集有一个delete方法可以删除该查询集的所有结果。对于你给出的例子
toarchive.filter(date__gt=interval).delete()
Run Code Online (Sandbox Code Playgroud)
将工作。但是,如果您正在进行的测试无法在过滤器中完成,那么您描述的方法可能是最好的。