我有以下代码:
foo_list = Foo.objects.all()[100:200]
print foo_list[0].id
print len(foo_list)
print foo_list[0].id
我希望第一次和第三次打印的结果是相等的,但它们不是。这是怎么发生的?
最佳答案
您在 https://code.djangoproject.com/ticket/9006 处遇到了“wontfix”问题--
LIMIT queries without ORDER BY aren't guaranteed to return consistent result sets
(取决于底层数据库引擎),这就是您的 [0]
索引导致发生的情况 - 因为尽管名称具有误导性,但 foo_list
是 不是列表,它是查询集本身!如 https://docs.djangoproject.com/en/1.7/ref/models/querysets/ 中所述,
Slicing an unevaluated
QuerySet
usually returns another unevaluatedQuerySet
解决方案:使其成为一个列表:
foo_list = list(Foo.objects.all()[100:200])
从此过上幸福的生活:-)
关于python - django 查询集中的意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29372445/