在删除同一个QuerySet中的对象时迭代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)

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


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

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

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

链接地址: http://www.djcxy.com/p/13341.html

上一篇: Iterating over a Django QuerySet while deleting objects in the same QuerySet

下一篇: Oracle AQ same message is delivered twice