【问题标题】:Slice on Django Model Queryset在 Django 模型查询集上切片
【发布时间】:2016-07-28 11:04:38
【问题描述】:

我尝试对分页结果进行查询,如下所示 Model.objects.all()[start: start+page_size].

我也想知道是否还有更多页面要加载,也就是说我想知道start+page_size < Model.objects.all().count().是否有

我的问题是,如果我在这里调用all() 两次,Django 是否会执行两次相同的查询(一次用于切片操作[],一次用于count())。

另一个问题是,如果我对Model.objects.all() 像这样Model.objects.all()[2:9] 进行切片,Django 是从 DB 中获取所有数据并通过 python 切片,还是 Django 仅使用 SQL 限制获取 limit 2 to 9

【问题讨论】:

标签: django django-models django-queryset


【解决方案1】:

是的,它进行了两个查询,但它们根本不是“同一个查询”。一个是SELECT * FROM mymodel LIMIT <page_size> OFFSET <start>,另一个是SELECT COUNT(*) FROM mymodel

如果您想避免两次查询,一个简单的解决方法是要求多于您实际需要的一条记录:

Model.objects.all()[start: start+page_size+1]

然后您可以迭代到 page_size,如果有多余的记录,则显示“下一步”按钮。

【讨论】:

猜你喜欢
  • 2011-08-24
  • 2012-12-15
  • 1970-01-01
  • 2023-01-22
  • 1970-01-01
  • 2010-10-30
  • 2016-04-01
  • 1970-01-01
  • 2010-09-26
相关资源
最近更新 更多