【问题标题】:JSON Fields pagination in Django REST frameworkDjango REST框架中的JSON字段分页
【发布时间】:2017-12-28 22:12:50
【问题描述】:

我正在尝试在最新的 Django REST 框架中添加分页, 由于轨道可能超过 1-2 k,如何在轨道字段内提供分页?

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

【问题讨论】:

标签: python django rest pagination


【解决方案1】:

希望您使用的是视图集,但没有它也能正常工作。如果您对视图集不满意,可以在这里阅读: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),
     ...
]

现在您可以像这样获取网址:albums/my_name_is_jeff/tracks/1 或 albums/5/tracks/1。除了“小路由器示例”之外,所有代码都是必需的,是的,将它与简单的 ClassBasedView 一起使用会很愚蠢

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-02
    • 2016-06-20
    • 1970-01-01
    • 2014-08-25
    • 2014-08-25
    • 2017-02-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多