Ich habe ein Modell Game
und mache die entsprechenden REST-Routen dafür, z.B. GET /game
, GET /game/1
usw.Wie erlaube ich POST zu einer list_route, aber nicht zu dem gesamten ViewSet?
Ich möchte nur API-Consumer, um vorhandene Spiele zu erhalten. Ich möchte nicht, dass sie neue Spiele willkürlich POSTIEREN können. Vielmehr sollten sie dafür eine spezielle Route, POST /game/upload_schedule
, durchlaufen müssen.
Ich habe folgendes:
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"])
Allerdings, wenn ich POST /game/upload_schedule
, erhalte ich eine Methode, Fehler nicht erlaubt. Der Grund ist, dass http_method_names
verhindert, dass es passiert. Wenn ich es wie folgt ändern:
http_method_names = ['get', 'head', 'post']
Dann wird die POST /game/upload_schedule
Strecke funktioniert. Jetzt tut dies aber auch POST /game
!
Wie gehe ich vor?