Django 在for循环中,如何排除查询集中的项?

Django 在for循环中,如何排除查询集中的项?,django,django-models,django-queryset,Django,Django Models,Django Queryset,我想删除 results = Model.objects.filter(condition - satisfied... etc.) 然后我循环查询集并在遍历代码时删除每个对象: for a in results: ### code ### results.exclude(id=a.id) 无论我如何排除,结果对象都不会更改。当我遍历查询集时,是否有办法“弹出”它们?更改代码的最后一部分,如下所示: for a in results: ### code ### res

我想删除

results = Model.objects.filter(condition - satisfied... etc.)
然后我循环查询集并在遍历代码时删除每个对象:

for a in results:

### code ###

    results.exclude(id=a.id)

无论我如何排除,结果对象都不会更改。当我遍历查询集时,是否有办法“弹出”它们?

更改代码的最后一部分,如下所示:

for a in results:

### code ###

    results = results.exclude(id=a.id)

因为queryset.exclude()返回一个新的queryset,而不更改现有的。

但是您可以为每个循环执行数据库查询,尽管您对每个循环调用了
.exclude()

如果只想删除每个循环的对象,可以使用:

new_list = list(results)
for a in results:  
    ### code ###
    new_list.remove(a)

你需要这是一个查询集吗?@Gocht。我知道可以从查询集中提取对象并使用.remove将其从列表中删除。我想看看是否有一种方法可以“就地”完成。queryset不会就地更新。您需要将queryset结果重新捕获到局部变量中。@karthikr。你是怎么做到的?我认为把它放到结果中已经使它变成了一个局部变量。