我正在使用Django Rest Framework 3,并遇到一些问题。我已经根据this example获得了自定义分页工作,并且我已经获得了一个非orm模型,其工作方式如下:this example。但是,我无法在非orm模型上获得自定义分页(或针对此问题的任何分页)。自定义分页在settings.py中设置为默认值,并且它适用于所有带模型的视图集。如何使用非orm模型自定义分页
带模型端点的JSON输出包含元信息并嵌套在“对象:”内的对象。没有模型的端点的JSON输出只是给出了一个对象列表。我的代码发布在下面。任何想法如何让这个工作?
自定义分页:
from rest_framework.pagination import LimitOffsetPagination
from rest_framework.response import Response
class CustomPagination(LimitOffsetPagination):
def get_paginated_response(self, data):
return Response({
'meta': {
'limit': self.get_limit(self.request),
'next': self.get_next_link(),
'offset': self.get_offset(self.request),
'previous': self.get_previous_link(),
'total_count': self.count
},
'objects': data
})
对象:
class EMSEvent(object):
def __init__(self, id, name, start, end):
self.id = id
self.name = name
self.start = start
self.end = end
串行:
class EMSEventSerializer(serializers.Serializer):
id = serializers.IntegerField()
name = serializers.CharField()
start = serializers.CharField()
end = serializers.CharField()
class Meta:
fields = '__all__'
视图集:
class EMSEventViewSet(viewsets.ViewSet):
serializer_class = EMSEventSerializer(many=True)
http_method_names = ['get']
def list(self, request):
results = []
"""
Here is code that opens up a SQL connection, executes a
query, then transfers the data into results
"""
# Always sort results by start time
results = sorted(results, key=lambda k: k.start)
serializer = EMSEventSerializer(instance=results, many=True)
return Response(serializer.data)
JSON输出的API端点与型号:
{
meta: {
limit: 20,
next: "/api/v1/endpoint/?offset=20&limit=20&format=json",
offset: 0,
previous: null,
total_count: 24
},
objects: [
{
description: "A Room",
end: "2017-03-03T15:30:00",
id: 1234,
name: "Grad Day",
resource_uri: "/api/v1/endpoint/1234/",
room: "CMU Room",
start: "2017-03-03T09:00:00"
}
]
}
JSON输出的API端点不车型
[
{
description: "A Room",
end: "2017-03-03T15:30:00",
id: 1234,
name: "Graduate Day",
resource_uri: "/api/v1/endpoint/1234/",
room: "CMU Room",
start: "2017-03-03T09:00:00"
}
]