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
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)

如果您继承ModelViewSet,则需要自定义list方法。

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)

最新更新