所以这是我的ViewSet:
class PostViewSet(viewsets.ModelViewSet):
queryset = Post.objects.all()
serializer_class = PostSerializer
permission_classes = (IsAuthenticated, IsLikeOrOwnerDeleteOrReadOnly,)
def perform_create(self, serializer):
serializer.save(owner=self.request.user, location=self.request.user.userextended.location)
@detail_route(methods=['post'], permission_classes=[IsFromLoactionOrReadOnly])
def like(self, request, pk=None):
post = self.get_object()
post.usersVoted.add(request.user)
return Response(status=status.HTTP_204_NO_CONTENT)
这是我的网址/路由器:
router.register(r'posts', views.PostViewSet)
现在,当我转到此网址时:
/posts
DRF发送所有帖子和序列号(或者我认为..我还没有很多帖子,所以我假设它发送了所有帖子)。我想要做的是我希望能够将我的ViewSet序列化的帖子数限制为10.我要序列化的10个对象取决于我想强制API用户使用URL发送的页码。例如,我想强制用户使用URL发送一个数字,如下所示:
/posts/x
在后端,我想用pk x序列化帖子到x + 9(所以如果我们假设x = 1,那么我想序列化pk = 1,pk = 2,pk = 3的帖子。 .pk = 10。)。这可能与DRF有关吗?我猜测我使用的是Pagination
,因为当我阅读文档时,它看起来像我需要的东西,但我无法完全理解分页的确切位置以及我如何使用它实现我想要的。以下是分页的文档:http://www.django-rest-framework.org/api-guide/pagination/
提前致谢。
答案 0 :(得分:1)
您想要使用Django Rest Framework提供的pagination控件,就像您猜测的那样。
这个snippit可能会帮助你绕过它:
{
"count": 1023
"next": "https://api.example.org/accounts/?page=5",
"previous": "https://api.example.org/accounts/?page=3",
"results": [
…
]
}
除了正常的'结果之外,它还显示了一个回复。您期望还包括下一个和上一个值。这些是指向端点的链接,可用于返回上一页数据的结果,或下一页的数据。将这些链接映射到适当的用户控件是前端的责任,以便可以进行分页导航。
答案 1 :(得分:1)
你是对的。你需要分页来实现这一目标。只需添加<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="first" >
<div class="d" >
<div class="c">
<div class="e"></div>
This is my first div to display image.
</div>
</div>
</div>
<div id="second">
</div>
<div id="third">
</div>
就像你写的pagination_class
等一样。另外,创建一个具有数字的类,您希望对其进行分页。
serializer_class
并设置from rest_framework.pagination import PageNumberPagination
class StandardResultsSetPagination(PageNumberPagination):
page_size = 10
page_size_query_param = 'page_size'
max_page_size = 1000
。