gpt4 book ai didi

django - 在 Django Rest Framework 中使用 APIView 和 viewset 设置路由器

转载 作者:行者123 更新时间:2023-12-05 01:37:14 25 4
gpt4 key购买 nike

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

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

我试图了解是否有一种方法可以从不同的 View 类(如 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: type object 'FileUploadView' has no attribute 'get_extra_actions'

我意识到(我认为)我可以将 APIView 用于 FileUploadView(并添加“.as_view()),但我我想我也必须使用 APIView 重写 UniquePostViewSet 并准确定义我想在细节中看到的内容,例如 POST、PUT 等...

我的问题是:有没有办法使用 DefaultRouter router.register 并插入一个继承自 APIView 的 View (和一个 View 同时继承自 viewsets.ModelViewset) ?

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

最佳答案

这样的事情应该可行。

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

关于django - 在 Django Rest Framework 中使用 APIView 和 viewset 设置路由器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61121598/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com