简体   繁体   中英

DRF : 'DemoView' should either include a `queryset` attribute, or override the `get_queryset()` method

I want to create a serializer without model.

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

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

When I goto URL: http://localhost:8000/demo/ , it is giving me following error :

DemoView should either include a queryset attribute, or override the get_queryset() method.

How can I resolve this error?

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)

If you don't want to create a model then you should extend 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)

I think you need to customize list method if you inherit from the 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)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM