根据文档,在使用继承自的类时启用分页没有什么特别的要求GenericAPIView
。
我查看了 django 和 django rest 框架的代码,并且ViewSet 查询集似乎没有排序。分页仅将SQL关键字LIMIT
和添加OFFSET
到查询中。
我不明白的是如何处理没有确定顺序的查询集?为什么文档没有说在ViewSet 查询集.order_by()
的末尾添加一条语句?
根据文档,在使用继承自的类时启用分页没有什么特别的要求GenericAPIView
。
我查看了 django 和 django rest 框架的代码,并且ViewSet 查询集似乎没有排序。分页仅将SQL关键字LIMIT
和添加OFFSET
到查询中。
我不明白的是如何处理没有确定顺序的查询集?为什么文档没有说在ViewSet 查询集.order_by()
的末尾添加一条语句?
需要排序才能使分页正常工作。没有它,您可以在不同的页面上重复几行并且很少丢失。django 文档中也提到了它:
为了一致的分页,QuerySet 应该被排序,例如使用 order_by() 子句或模型上的默认排序。
https://docs.djangoproject.com/en/2.2/topics/pagination/#required-arguments
这篇关于默认排序的文章也值得阅读:https ://docs.microsoft.com/pl-pl/archive/blogs/conor_cunningham_msft/no-seatbelt-expecting-order-without-order-by
没有明确顺序的查询应该是特定于数据库的,并且不能保证您将获得排序的结果集(除非 django 默认按 id 排序),请参阅此处以获得类似的答案。