2017-07-23 3 views
0

Ich versuche, Paginierung in Lates Django REST-Framework hinzufügen, Wie kann ich Paginierung innerhalb Tracks Feld, da Spuren können mehr als 1-2 k?JSON Felder Paginierung in Django REST-Framework

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

Haben Sie django.core.paginator ausprobiert? – MishaVacic

+0

https://stackoverflow.com/questions/15617595/paginate-relationship-in-django-rest-framework Frage mit vielen Antworten. Hoffe das wird dir helfen. – Devansh

+0

pagination.PaginationSerializer Dies ist für DRF

Antwort

0

Ich hoffe, Sie verwenden Viewset, aber es wird ohne es funktionieren. wenn Sie mit Viewsets schlecht sind, können Sie sie hier lesen: 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. Wenn Sie keine Router verwenden, lesen Sie Docks und verwenden Sie sie mit einem ViewSet anstelle Ihres ClassView, aber das funktioniert auch ohne sie. (Router: 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), 
    ... 
] 

Jetzt können Sie URL wie folgt holen: Alben/my_name_is_jeff/Tracks/1 oder Alben/5/Tracks/1. Alles Code ist erforderlich, außer "kleines Fräserbeispiel", und yep es `albern sein, es mit einfachem ClassBasedView zu verwenden

Verwandte Themen