gpt4 book ai didi

Django 。 '' 当我尝试允许 DELETE、PUT 等时,调用 `actions` `.as_view()` 时必须提供 '' 参数

转载 作者:行者123 更新时间:2023-12-01 22:27:46 24 4
gpt4 key购买 nike

我必须允许从前面删除和更新某些模型的对象的请求。我希望删除数据库中的实例和相应的行。

我尝试使用 DRF 教程 ( https://www.django-rest-framework.org/tutorial/6-viewsets-and-routers/ ) 中的信息以及其他一些示例。我知道如果我使用 ViewSet 我必须允许一些操作并使用行。我使用 DRF 教程中的装饰器。

这是我的观点.py

class DualFcaPlanUseViewSet(viewsets.ModelViewSet):

authentication_classes = (CsrfExemptSessionAuthentication,)
def get_queryset(self):
user = self.request.user
return FcaPlanUse.objects.filter(id_fca__num_of_agree__renters_id__user_key = user)
def get_serializer_class(self):
if self.request.method == 'GET':
return FcaPlanUseSerializer
if self.request.method == 'POST':
return FcaPlanUsePOSTSerializer
@action(detail=True, renderer_classes=[renderers.StaticHTMLRenderer])
def highlight(self, request, *args, **kwargs):
fcaplanuse = self.get_object()
return Response(fcaplanuse.highlighted)
def perform_create(self, serializer):
serializer.save(owner=self.request.user)

我在应用程序 urls.py 中的操作

from django.conf.urls import url
from rest_framework import renderers
from . import views
from cutarea.views import DualFcaPlanUseViewSet

fcaplanuse_list = DualFcaPlanUseViewSet.as_view({
'get': 'list',
'post': 'create'
})
fcaplanuse_detail = DualFcaPlanUseViewSet.as_view({
'get': 'retrieve',
'put': 'update',
'patch': 'partial_update',
'delete': 'destroy'
})
fcaplanuse_highlight = DualFcaPlanUseViewSet.as_view({
'get': 'highlight'
}, renderer_classes=[renderers.StaticHTMLRenderer])

这是我的项目 urls.py 的一部分

from cutarea.views import *
#...
from rest_framework import routers
router = routers.DefaultRouter()
router.register(r'cutarea', DualFcaPlanUseViewSet.as_view(), base_name='cutareadel')
#...

urlpatterns = [
#...
url(r'^api/', include(router.urls)),
]

结果:类型错误:在 ViewSet 上调用“.as_view()”时必须提供“actions”参数。例如 `.as_view({'get': 'list'})

如果我设置一些像示例中那样的操作,则由终端抛出:router.register(r'cutarea', DualFcaPlanUseViewSet.as_view('destroy': 'delete'), base_name='cutareadel') 我遇到语法错误...我想了解 View 集如何与路由器一起工作,以及允许额外的 HTTP 方法(删除、更新等)的好方法

<小时/>

事实证明,如果我使用这个:

router.register(r'cutarea', DualFcaPlanUseViewSet, base_name='cutareadel')

错误已解决。但不允许使用 DELETE 方法。怎么了?

最佳答案

注册 ViewSet 时不使用 as_view:

from cutarea.views import *
#...
from rest_framework import routers
router = routers.DefaultRouter()
router.register(r'cutarea', DualFcaPlanUseViewSet, basename='cutareadel')
#...

urlpatterns = [
#...
url(r'^api/', include(router.urls)),
]

编辑:使用 basename 而不是 base_name 感谢 @greg-schmit 的指出。

关于 Django 。 '' 当我尝试允许 DELETE、PUT 等时,调用 `actions` `.as_view()` 时必须提供 '' 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56149121/

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