我想创建一个没有模型的序列化器。
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)