问题在于设置
http_method_names
属性设置为ModelViewSet。既然你把它设为
get
和
post
,其他方法(
put
,
patch
,
delete
)不会在课堂上工作。要么你必须添加
删去
方法
http_方法_名称
属性或移除整个属性来修复此问题,如下所示。
class UserViewSet(viewsets.ModelViewSet):
serializer_class = UserSerializer
queryset = User.objects.all()
@action(detail=True, methods=['delete'])
def delete_profile(self, request, pk=None):
Profile.objects.get(user=pk).delete()
return Response(status=status.HTTP_204_NO_CONTENT)
如果你不想要别的方法
收到
,
邮递
,
删去
为什么不使用mixins?
更新:
如果不想让delete方法在主视图集上工作,只需覆盖它,如图所示。
class UserViewSet(viewsets.ModelViewSet):
serializer_class = UserSerializer
queryset = User.objects.all()
@action(detail=True, methods=['delete'])
def delete_profile(self, request, pk=None):
....
def destroy(self, request, *args, **kwargs):
return Response(status=status.HTTP_405_METHOD_NOT_ALLOWED)