【发布时间】:2020-12-31 08:53:37
【问题描述】:
我们可以在 Django Rest Framework 中将 LimitOffsetPagination 与 viewsets.ViewSet 一起使用吗?
settings.py:
REST_FRAMEWORK = {
"DEFAULT_AUTHENTICATION_CLASSES": [
"rest_framework.authentication.TokenAuthentication",
],
"DEFAULT_PERMISSION_CLASSES": [
"rest_framework.permissions.IsAuthenticated",
],
"DEFAULT_PAGINATION_CLASS": "rest_framework.pagination.LimitOffsetPagination",
"PAGE_SIZE": 100,
}
下面是我的列表视图的外观:
class UserViewSet(viewsets.ViewSet):
pagination_class = LimitOffsetPagination
def get_permissions(self):
"""
Instantiates and returns the list of permissions that this view requires.
"""
permission_classes = [IsAuthenticated]
if self.action == "list" or self.action == "retrieve":
permission_classes.append(UserReadPermission)
elif self.action == "create" or self.action == "update":
permission_classes.append(UserWritePermission)
elif self.action == "destroy":
permission_classes.append(UserDeletePermission)
return [permission() for permission in permission_classes]
def list(self, request):
serializer = UserIndexSerializer(data=request.query_params)
if serializer.is_valid():
users = User.objects.all()
serializer = UserGetSerializer(users, many=True)
response = {"users": serializer.data, "total": len(serializer.data)}
return AppResponse.success("User list found.", response)
return AppResponse.error(serializer.errors, None, http_error_code=400)
def create(self, request):
pass
def retrieve(self, request, pk=None):
pass
def update(self, request, pk=None):
pass
def partial_update(self, request, pk=None):
pass
def destroy(self, request, pk=None):
pass
【问题讨论】:
-
只需将
pagination_class = NameOfYourPagination添加到您的视图集中(作为类属性,而不是在 list() 方法中)。LimitOffsetPagination将与 PAGE_SIZE 参数一起在您的 settings.py 中设置。django-rest-framework.org/api-guide/pagination/… -
@BriseBalloches 做到了,但分页不起作用。我还更新了添加viewsets.ViewSet的整个实现的问题
-
你能用你的 settings.py REST_FRAMEWORK 变量 && 整个 Viewset 代码来编辑你的问题吗?
-
@BriseBalloches 我们不能将分页类的使用限制在视图或视图集本身吗?还是我们需要在整个框架范围内实现它?
-
可以,但是还是需要在settings.py中设置
REST_FRAMEWORK = {'PAGE_SIZE': 100},否则会被认为是None。
标签: django django-rest-framework django-pagination