DRF: как запретить create () в сериализаторе - PullRequest
1 голос
/ 05 марта 2020

Я работаю с DRF и у меня есть ViewSet, где я хочу разрешить все возможные действия (список, детали, обновление, удаление), кроме create().

Это то, что у меня есть для момент:

class FooViewSet(viewsets.ModelViewSet):

    queryset = Foo.objects.order_by('-date_added').all()
    serializer_class = FooSerializer

    def create(self, request):
        return Response(status=status.HTTP_405_METHOD_NOT_ALLOWED)

    def update(self, request, pk=None):
        version = get_object_or_404(Foo, pk=pk)
        html = request.data.get('html')
        version.update_content(html)
        return Response(data={
            'id': version.id,
            'name': version.name,
            'description': version.description,
            'html': version.content,
        }, status=status.HTTP_200_OK)

Я знаю, что мог бы заставить сериализатор наследовать от ReadOnlyModelViewSet, но тогда я бы не смог его обновить.

Так что самый чистый способ запретить до create()?

Ответы [ 2 ]

2 голосов
/ 05 марта 2020

Как указано в этом ответе , вы можете ограничить допустимые методы, добавив http_method_names в любом представлении класса. http_method_names - это атрибут Django класса представления по умолчанию, подробное определение которого можно найти в этой ссылке .

. В качестве примера возьмите свой код, если вы хотите исключить создание (см. «Post» метод), вы можете сделать следующее:

class FooViewSet(viewsets.ModelViewSet):
    queryset = Foo.objects.order_by('-date_added').all()
    serializer_class = FooSerializer
    http_method_names = ['head', 'get', 'put', 'patch', 'delete']

0 голосов
/ 05 марта 2020

из кода остального фреймворка

class ModelViewSet(mixins.CreateModelMixin,
               mixins.RetrieveModelMixin,
               mixins.UpdateModelMixin,
               mixins.DestroyModelMixin,
               mixins.ListModelMixin,
               GenericViewSet):

вы можете создать свой набор без CreateModelMixin

class MyViewSet(mixins.RetrieveModelMixin,
               mixins.UpdateModelMixin,
               mixins.DestroyModelMixin,
               mixins.ListModelMixin,
               GenericViewSet):
...