Создание пользовательских обобщений для получения, обновления, удаления и публикации с помощью Django Rest Framework в Django - PullRequest
0 голосов
/ 25 февраля 2019

Я думаю о рефакторинге своего кода, потому что я думаю, что слишком много повторяюсь, заканчивая строками кода.Взять этот пример ниже. Я реализовал представление на основе классов для GET, PUT и DELETE для модели Unit.Позже я создам другое представление для Department для выполнения CRUD и буду следовать той же схеме, есть ли способ, которым я могу создавать настраиваемые общие представления модели, которые можно динамически использовать в любом другом представлении.

class UnitDetailView(generics.RetrieveAPIView):
    """ Class based view for Unit Details. """

    serializer_class = UnitSerializer
    queryset = Unit.objects.all()

    def get_object(self, pk, org_id=None):
        try:
            return Unit.objects.get(pk=pk, org_id=org_id)
        except Unit.DoesNotExist:
            raise Http404

    def get(self, request, pk, format=None):
        """Get a unit instance."""
        unit_obj = self.get_object(pk, org_id=get_auth(request))
        serializer = UnitSerializer(unit_obj)
        return Response(serializer.data)

    def put(self, request, pk, format=None):
        """Update a unit instance."""
        unit_obj = self.get_object(pk, org_id=get_auth(request))
        serializer = UnitSerializer(unit_obj, data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

    def delete(self, request, pk, format=None):
        """Remove a unit instance."""
        unit_obj = self.get_object(pk, org_id=get_auth(request))
        unit_obj.delete()
        return Response(status=status.HTTP_204_NO_CONTENT)

1 Ответ

0 голосов
/ 25 февраля 2019

Вы можете использовать viewsets.ModelViewSet.И вам не нужно писать каждый метод (получить, положить, удалить, обновить)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...