首页 > 解决方案 > 在 Django Rest Framework 中使用 APIView 和 viewset 设置路由器

问题描述

这是我在 Stackoverflow 上的第一个问题!

我是 Django 的新手,并且正在学习一些教程。

我试图了解是否有办法从不同的视图类(如 APIView 和 viewsets.ModelViewSet)设置 API 的路由(如果我不使用好的措辞,请告诉我)

在我的观点中:

from rest_framework import viewsets
from post.models import UniquePost
from .serializers import UniquePostSerializers
from rest_framework.views import APIView

class UniquePostViewSet(viewsets.ModelViewSet):
    serializer_class = UniquePostSerializers
    queryset = UniquePost.objects.all()

class FileUploadView(APIView):
     some code here but no queryset nor serialized data...and no model

在网址中我有:

from post.api.views import UniquePostViewSet
from django.urls import path, include
from rest_framework.routers import DefaultRouter

from post.api.views import FileUploadView

router = DefaultRouter()
router.register('UniquePost', UniquePostViewSet, base_name='uniquepostitem')
router.register('demo', FileUploadView, base_name='file-upload-demo')
urlpatterns = router.urls

但似乎我可以通过这种方式注册 FileUploadView。因为我没有要呈现的查询集。

我有:AttributeError:类型对象'FileUploadView'没有属性'get_extra_actions'

我意识到(我认为)我可以使用APIViewFileUploadView并添加 " .as_view())但我认为我也必须重写UniquePostViewSetusingAPIView并准确定义我想要在 POST、PUT 等细节中看到的内容......

我的问题是:有没有办法同时使用DefaultRouter router.register和插入继承自APIView(以及继承自的视图viewsets.ModelViewset)的视图?

希望所有这些都清楚,非常感谢您的帮助!!!

标签: djangodjango-rest-frameworkdjango-viewsdjango-urls

解决方案


像这样的东西应该工作。

from post.api.views import UniquePostViewSet
from django.urls import path, include
from rest_framework.routers import DefaultRouter

from post.api.views import FileUploadView

router = DefaultRouter()
router.register('UniquePost', UniquePostViewSet, base_name='uniquepostitem')

urlpatterns = [
    path('demo',FileUploadView.as_view(),name='demo'),  
]

urlpatterns += router.urls

推荐阅读