Python Django REST框架中的JSON字段分页
我试图在最新的Django REST框架中添加分页, 由于轨迹可能超过1-2 k,如何在轨迹字段内提供分页Python Django REST框架中的JSON字段分页,python,django,rest,pagination,Python,Django,Rest,Pagination,我试图在最新的Django REST框架中添加分页, 由于轨迹可能超过1-2 k,如何在轨迹字段内提供分页 { 'album_name': 'The Grey Album', 'artist': 'Danger Mouse' 'tracks': [ {'title': 'Public Service Announcement'}, {'title': 'What More Can I Say'},
{
'album_name': 'The Grey Album',
'artist': 'Danger Mouse'
'tracks': [
{'title': 'Public Service Announcement'},
{'title': 'What More Can I Say'},
{'title': 'Encore'},
............ 1k
],
}
希望您使用的是viewset,但如果没有它,它将正常工作。如果您不熟悉视图集,您可以在此处了解它们: 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)
从django.core.paginator导入paginator
...
类AlbumViewSet(viewsets.ModelViewSet):
queryset=Album.objects.all()
serializer\u class=AlbumSerializer
@详细资料(路线)
def跟踪(自我、请求、主键、页面):
#如果要使用url:albums/)
#小路由器示例
从rest_framework.router导入默认路由器
路由器=默认路由器()
router.register(r'albums',View.PostViewSet)
#结束小路由器的例子
用户发布=views.AlbumViewSet.as\u视图({
“获取”:“跟踪”
})
URL模式=[
...
url(r'^albums/(?P\w+)/tracks/(?P[0-9]+)/,用户帖子),
...
]
现在您可以像这样获取url:albums/my_name\u是\u jeff/tracks/1或albums/5/tracks/1。除了“little router example”之外,所有的代码都是必需的,是的,将它与简单的ClassBasedView一起使用是愚蠢的你试过django.core.paginator吗?有很多答案的问题。希望这将对您有所帮助。pagination.PaginationSerializer这是用于DRF<3.0版的。此类已被删除
# 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),
...
]