Django Rest框架:使用create with primary key in URL



我不能将@action装饰器应用于标准views.Viewset子类中的create函数。

@action(detail=True) # This fails.
def create(self, request, pk=None):
return Response(etc...)

在其他方法上,添加该装饰器允许我在URL中轻松地使用<pk>创建URL。例如,我可以向http://main_url.com/do_something_to_user_with_id/7/发送POST请求,do_something_to_user_with_id是视图集中的一些随机函数,7是用户id/主键。

我可以用create做到这一点吗?

ViewSet提供了以下六个动作-list, create, retrieve, update, partial_update and destroy- here

所以你不需要action装饰器来实现create方法的路由,因为它是post调用的默认路由,正如这里提到的-

ViewSet类只是一种基于类的视图类型,它没有提供任何方法处理程序,如.get()或.post(),而不是提供。list()和。create()等操作。

所以,如果你有任何方法,除了上面列出的六个方法名,你想路由,那么你可以使用@action装饰器。在这儿

如果您有应该路由可达的ad-hoc方法,您可以标记它们就像@action装饰器一样。就像常规的行动,额外的动作可以针对单个对象,也可以针对整个对象收集。要指出这一点,请将detail参数设置为True或假的。

如果你知道django-restframework,那么你可以这样做

from rest_framework.decorators import api_view

@api_view(['GET'])
def create(self, request, pk=None):
return Response(etc...)

最新更新