Hope you are using viewset, but it will work without it. if you are bad with viewsets you can read about them here: 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. If you dont use routers read docks and use them with a ViewSet instead of your ClassView, but that will work without them as well. (routers: 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),
...
]
Now you can fetch url like this: albums/my_name_is_jeff/tracks/1 or albums/5/tracks/1. All code is required except 'little router example', and yep it`ll be silly to use it with simple ClassBasedView