希望你正在使用viewset,但它會在沒有它的情況下工作。如果你是viewsets糟糕,你可以在這裏讀到過:http://www.django-rest-framework.org/api-guide/viewsets/
views.py
from django.core.paginator import Paginator
...
class AlbumViewSet(viewsets.ModelViewSet):
queryset = Album.objects.all()
serializer_class = AlbumSerializer
@detail_route()
def tracks(self, request, pk, page):
# if you want to use url: albums/<album_id>/tracks/page/
track_set = Tracks.objects.get(album_id=int(pk))
# elif you want to use url: albums/<album_name>/tracks/page/
track_set = Tracks.objects.get(album_album_name=pk)
paginator = Paginator(track_set, page_size) # ! change page_size to yours
serializer = TrackSerializer(paginator.page(page), many=True, context={'request': request})
return Response(serializer.data)
urls.py.如果你不使用路由器讀取碼頭,並將它們與ViewSet一起使用,而不是使用ClassView,但是如果不使用它們,它們也可以工作。 (路由器:http://www.django-rest-framework.org/api-guide/routers/)
# little router example
from rest_framework.routers import DefaultRouter
router = DefaultRouter()
router.register(r'albums', views.PostViewSet)
# end little router example
user_posts = views.AlbumViewSet.as_view({
'get': 'tracks'
})
urlpatterns = [
...
url(r'^albums/(?P<pk>\w+)/tracks/(?P<page>[0-9]+)/', user_posts),
...
]
現在可以獲取URL是這樣的:專輯/ my_name_is_jeff /跟蹤/ 1或專輯/ 5 /跟蹤/ 1。所有的代碼是必需的,除了「小路由器的例子」,並且它將是愚蠢的使用它與簡單ClassBasedView
你試過django.core.paginator? – MishaVacic
https://stackoverflow.com/questions/15617595/paginate-relationship-in-django-rest-framework問題有很多答案。希望這會幫助你。 – Devansh
pagination.PaginationSerializer這是用於DRF