繁体   English   中英

DRF:“DemoView”应包含“queryset”属性,或覆盖“get_queryset()”方法

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

我想创建一个没有 model 的序列化程序。

我的项目/我的应用程序/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)

我的项目/我的应用程序/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)),
]

我的项目/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)

如果你不想创建 model 那么你应该扩展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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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