Ответ 1
Если вам не нужен ModelViewSet и вы хотите использовать собственный JSON для запроса GET
Вы также можете использовать APIView
, который не требует модели
class MyOwnView(APIView):
def get(self, request):
return Response({'some': 'data'})
а также
urlpatterns = [
url(r'^my-own-view/$', MyOwnView.as_view()),
]
С ModelViewSet
Вы поместили пользовательский JSON в get_queryset, что неправильно. Если вы хотите использовать ModelViewSet
, этого должно быть достаточно:
class TestViewSet(viewsets.ModelViewSet):
queryset = Test.objects.all()
serializer_class = TestSerializer
Этот ModelViewSet
поставляется с реализациями по умолчанию для .list()
, .retrieve()
, .create()
, .update()
и .destroy()
. Которые доступны для вас, чтобы переопределить (настроить) по мере необходимости
Возврат пользовательского JSON из .retrieve()
и/или .list()
в ModelViewSet
Например, переопределить .retrieve()
чтобы вернуть пользовательский вид при извлечении одного объекта. Мы можем взглянуть на реализацию по умолчанию, которая выглядит так:
def retrieve(self, request, *args, **kwargs):
instance = self.get_object()
serializer = self.get_serializer(instance)
return Response(serializer.data)
Итак, в качестве примера, чтобы вернуть пользовательский JSON:
class TestViewSet(viewsets.ModelViewSet):
queryset = Test.objects.all()
serializer_class = TestSerializer
def retrieve(self, request, *args, **kwargs):
return Response({'something': 'my custom JSON'})
def list(self, request, *args, **kwargs):
return Response({'something': 'my custom JSON'})