Yan*_* Li 2 django django-models django-queryset
我尝试对分页结果运行查询,就像这样
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
是的,它会进行两次查询,但这些查询根本不是"相同的查询".一个是SELECT * FROM mymodel LIMIT <page_size> OFFSET <start>另一个是SELECT COUNT(*) FROM mymodel.
如果你想避免两个查询,一个简单的解决方法就是要求多于你实际需要的记录:
Model.objects.all()[start: start+page_size+1]
Run Code Online (Sandbox Code Playgroud)
那么你可以迭代到page_size,如果有额外的记录,则显示Next按钮.
| 归档时间: |
|
| 查看次数: |
3740 次 |
| 最近记录: |