2017-07-23 47 views
0

我正在試圖添加分頁的Django REST框架, 如何在track字段中提供分頁,因爲track可以超過1-2 k?JSON在Django REST框架中的字段分頁

{ 
    'album_name': 'The Grey Album', 
    'artist': 'Danger Mouse' 
    'tracks': [ 
       {'title': 'Public Service Announcement'}, 
       {'title': 'What More Can I Say'}, 
       {'title': 'Encore'}, 
       ............ 1k 
       ], 
} 
+0

你試過django.core.paginator? – MishaVacic

+0

https://stackoverflow.com/questions/15617595/paginate-relationship-in-django-rest-framework問題有很多答案。希望這會幫助你。 – Devansh

+0

pagination.PaginationSerializer這是用於DRF

回答

0

希望你正在使用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