Django在100个对象后停止

时间:2014-01-13 09:46:22

标签: python django

我做了一个小的Django项目,我想比较添加的对象以找到dublets(我已经使用了unique_together Meta选项,但这完全不符合我的需要。)

当我启动脚本时,它会在100次迭代后完成,尽管有大约60000个对象。

objects = Django_app.objects.all()

for object_a in objects:
    for object_b in objects:
        compare( object_a, object_b)

有人可以解释这种行为吗?

解决方案:

objects = list( objects.all() )

谢谢大家!

1 个答案:

答案 0 :(得分:2)

迭代列表时,Python使用指针遍历对象列表。迭代同一个对象(相同的项目列表)时,Python会小心使用两个单独的指针。因此,当您执行objects = list(objects)时,这将创建一个普通的Python对象列表。对objects的嵌套迭代与预期的一样工作。使用Django Querysets,行为有些不同。 Queryset是从数据库中获取的,只有一个指针。将Queryset强制转换为常规列表是最简单的解决方法。