我编写了以下代码:
class UserViewSet(viewsets.ReadOnlyModelViewSet):
queryset = User.objects.all()
serializer_class = UserSerializer
permission_classes = [IsCreation|permissions.IsAuthenticated]
def change_password(self, request):
print(request.user)
在urls.py
中具有相应的路线:
path('api/users/password', views.UserViewSet.as_view({'post': 'change_password'}))
但是当我向'api/users/password/'
发出请求时,出现此错误:
{
"detail": "Method \"POST\" not allowed."
}
我在做什么错了?
答案 0 :(得分:1)
顾名思义,ReadOnlyModelViewSet
仅支持 HTTP GET 方法。
为了支持其他方法,您需要使用ModelViewSet
类(或其他合适的类)
例如:
class UserViewSet(viewsets.ModelViewSet): # change the super class
queryset = User.objects.all()
serializer_class = UserSerializer
permission_classes = [IsCreation | permissions.IsAuthenticated]
旁注::方法change_password(...)
看起来像是 自定义操作 ,但您缺少@action
装饰器。
答案 1 :(得分:1)
ReadOnlyModelViewSet
仅提供“只读”操作,这就是为什么出现错误POST not allowed
的原因。您可以详细了解Here