Django 如何允许发布到列表路径,但不允许发布到整个视图集?
我有一个Django 如何允许发布到列表路径,但不允许发布到整个视图集?,django,django-rest-framework,http-method,Django,Django Rest Framework,Http Method,我有一个Game模型,正在为它执行相应的休息路线,例如GET/Game,GET/Game/1,等等 我只希望API消费者获得现有的游戏。我不希望他们能够随意发布新游戏。相反,他们应该通过一条特殊的路线,即发布/游戏/上传时间表 我有以下资料: class GameViewSet(viewsets.ModelViewSet): queryset = Game.objects.all() serializer_class = GameSerializer http_metho
Game
模型,正在为它执行相应的休息路线,例如GET/Game
,GET/Game/1
,等等
我只希望API消费者获得现有的游戏。我不希望他们能够随意发布新游戏。相反,他们应该通过一条特殊的路线,即发布/游戏/上传时间表
我有以下资料:
class GameViewSet(viewsets.ModelViewSet):
queryset = Game.objects.all()
serializer_class = GameSerializer
http_method_names = ['get', 'head']
@list_route(methods=['post'])
def upload_schedule(self, request):
return Response(["foo"])
http_method_names = ['get', 'head', 'post']
但是,当我POST/game/upload\u schedule
时,我得到了一个method not allowed错误。原因是http\u方法\u名称
阻止了这种情况的发生。如果我将其更改为以下内容:
class GameViewSet(viewsets.ModelViewSet):
queryset = Game.objects.all()
serializer_class = GameSerializer
http_method_names = ['get', 'head']
@list_route(methods=['post'])
def upload_schedule(self, request):
return Response(["foo"])
http_method_names = ['get', 'head', 'post']
然后,POST/game/upload\u时间表
路线开始工作。然而,现在也有了POST/game
如何继续?这是一个XY问题。
GameViewSet
应该只处理Game
s和专门处理游戏的东西。上传时间表不是游戏列表的属性,而是一条单独的路线。因此,将其设置为一个APIView
,与GameViewSet
分开:
class UploadSchedule(APIView):
def post(self, request):
raise NotImplementedError()
然后在^upload\u schedule$
下显式地将其路由到上