Я прочитал этот вопрос Как сгенерировать атрибут данных JSON-API против атрибута результатов в JSON API Django Rest Framework? но принятый ответ не работает для меня, плюс у меня возникла проблема покрыты там.
Я использую Django Rest Framework (3.5.3) для предоставления конечной точки API. Эта конечная точка основана на
class FruitTestReadOnlyViewSet(viewsets.ReadOnlyModelViewSet):
queryset = Fruit.objects.all()
serializer_class = FruitSerializer
authentication_classes = (TokenAuthentication,)
permission_classes = (IsAuthenticated,)
Данные, возвращаемые оттуда, в порядке, за исключением того, что они имеют атрибут «results», а не «data».
Вопрос Я упоминал выше, предлагает вам сделать это
class FruitTestReadOnlyViewSet(viewsets.ReadOnlyModelViewSet):
queryset = Fruit.objects.all()
serializer_class = FruitSerializer
authentication_classes = (TokenAuthentication,)
permission_classes = (IsAuthenticated,)
renderer_classes = (JSONRenderer,)
parser_classes = (JSONParser,)
но это не имеет значения для меня, и на самом деле у меня уже есть глобальные настройки, которые, как я считаю, охватывают аспекты рендеринга и синтаксического анализатора, подобные этому
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.TokenAuthentication',
'rest_framework.authentication.SessionAuthentication',
),
'PAGE_SIZE': 10,
'EXCEPTION_HANDLER': 'rest_framework_json_api.exceptions.exception_handler',
'DEFAULT_PAGINATION_CLASS':
'rest_framework_json_api.pagination.PageNumberPagination',
'DEFAULT_PARSER_CLASSES': (
'rest_framework_json_api.parsers.JSONParser',
'rest_framework.parsers.FormParser',
'rest_framework.parsers.MultiPartParser'
),
'DEFAULT_RENDERER_CLASSES': (
'djangorestframework_camel_case.render.CamelCaseJSONRenderer',
'rest_framework_json_api.renderers.JSONRenderer',
'rest_framework.renderers.BrowsableAPIRenderer',
),
'DEFAULT_METADATA_CLASS': 'rest_framework_json_api.metadata.JSONAPIMetadata',
}
Так что мне интересно знать, делал ли это кто-то недавно и как он это сделал?
Кстати, у меня есть другие конечные точки API, основанные на ModelViewSet
, которые работают нормально и которые предоставляют атрибут «данные», а не «результаты» ... вот пример одной из этих
class TreeViewSet(viewsets.ModelViewSet):
"""
API endpoint that allows Tree to be CRUDed.
"""
queryset = Tree.objects.all()
serializer_class = TreeSerializer
authentication_classes = (TokenAuthentication,)
permission_classes = (IsAuthenticated,)
def get_queryset(self):
return Tree.objects.filter(username=self.request.user)