python - django 查询集中的意外行为

标签 python django django-queryset

我有以下代码:

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 unevaluated QuerySet

解决方案:使其成为一个列表:

foo_list = list(Foo.objects.all()[100:200])

从此过上幸福的生活:-)

关于python - django 查询集中的意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29372445/

相关文章:

javascript - Bokeh 图上的可点击点

python - 如何在 ListView 中设置选择?

python - 如何检查Python中的字符串是否为ASCII?

python - Django 和 Deployment 中的私有(private)设置

python - 如何在 Django 数据库请求中进行数学筛选?

django.db.utils.ProgrammingError : relation "auth_permission" does not exist

python - Django 内部连接查询集

Django ORM : get the monthly average of price for each category

python - Django ORM 按两个相关模型的 Max 列值过滤

Python - 对风险的边际贡献