DRF : 'DemoView' должен либо включать атрибут `queryset`, либо переопределять метод `get_queryset()`.

Я хочу создать сериализатор без модели.

myproject/myapp/views.py :

from rest_framework import viewsets
from rest_framework.response import Response
from .serializers import DemoSerializer

class DemoView(viewsets.ModelViewSet):
    def get(self, request):
        my_data = [{"name": "Harsha"}, {"name": "Harsha"}]
        results = DemoSerializer(my_data, many=True).data
        return Response(results)

myproject/myapp/urls.py

from django.urls import path, include
from . import views
from rest_framework import routers

router = routers.DefaultRouter()
router.register('demo', views.DemoView, basename='Demo')

urlpatterns = [
    path('', include(router.urls)),
]

myproject/myapp/serializer.py

from rest_framework import serializers
# from .models import Demo

class DemoSerializer(serializers.Serializer):
    name = serializers.CharField()

Когда я перехожу к URL: http://localhost:8000/demo/, он выдает мне следующую ошибку:

DemoView должен либо включать атрибут queryset, либо переопределить метод get_queryset().

Как я могу решить эту ошибку?

from .models import Demo

class DemoView(viewsets.ModelViewSet):
    def get_queryset(self):
        return Demo.objects.all()

    def get(self, request):
        my_data = [{"name": "Harsha"}, {"name": "Harsha"}]
        results = DemoSerializer(my_data, many=True).data
        return Response(results)

Если вы не хотите создавать модель, то вам следует расширить viewsets.ViewSet.

class DemoView(viewsets.ViewSet):

    def get(self, request):
        my_data = [{"name": "Harsha"}, {"name": "Harsha"}]
        results = DemoSerializer(my_data, many=True).data
        return Response(results)

Я думаю, что вам нужно настроить метод list, если вы наследуете от ModelViewSet.

class DemoView(viewsets.ModelViewSet):
    queryset = Demo.objects.all()

    def list(self, request):
        my_data = [{"name": "Harsha"}, {"name": "Harsha"}]
        results = DemoSerializer(my_data, many=True).data
        return Response(results)
Вернуться на верх