gpt4 book ai didi

python - DRF(django-rest-framework) Action 装饰器不工作

转载 作者:行者123 更新时间:2023-11-28 18:06:23 28 4
gpt4 key购买 nike

我有这个类 View ,它非常适合创建和列出 SiteGroup 的对象:

但我需要一种方法来对单个 SiteGroup 对象以及与它们关联的对象执行多个操作。因此,我尝试创建一个用@action 装饰的方法(如文档所建议的那样)。

根据文档,这将自动生成中间 url。然而,它不起作用。

当我尝试访问时(假设 423 是一个现有的 SiteGroup 对象):

http://127.0.0.1:8000/api/site-groups/423/replace_product_id/?product_id=0x345

找不到网址。

我也尝试在 urls.py 中自己生成 URL,但没有成功。

有人能告诉我问题出在哪里吗?我浏览了所有文档,但没有发现任何线索。非常感谢。

class SiteGroupDetail(generics.ListCreateAPIView):
queryset = SiteGroup.objects.all()
parser_classes = (MultiPartParser, FormParser, JSONParser)
serializer_class = SiteGroupSerializer
authentication_classes = (authentication.TokenAuthentication,)

@action(detail=True, methods=['post'], url_path='replace_product_id', permission_classes=[IsSuperUser], url_name='replace_product_id')
def replace_product_id(self, request, pk=None, device_type=None):
serializer = SiteGroupSerializer(data=request.data)
product_id = self.request.query_params.get('product_id', None)
print("replace_product", product_id, device_type, pk, flush=True)
return Response({"hello":product_id})

我的 urls.py

from django.conf.urls import url, include

from api import views, routers

router = routers.SimpleRouter()
router.register(r'users', views.UserViewSet)
router.register(r'groups', views.GroupViewSet)

urlpatterns = [
url(r'^', include(router.urls)),
enter code here
url(r'^site-groups/', views.SiteGroupDetail.as_view()),

url(r'^site-groups/(?P<pk>[0-9]+)/$', views.SiteGroupDetail.as_view()),

]

最佳答案

一方面路由器应该调用

super(OptionalSlashRouter, self).__init__()

您现在调用 SimpleRouter 父级的 __init__,跳过 SimpleRouter.__init__ 中的逻辑

改变它,看看它是否开始工作

实际上,当您使用 python 3 时,它可能只是

super ().__init__()

关于python - DRF(django-rest-framework) Action 装饰器不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53217806/

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