使用Django中的Django Rest Framework为get,update,delete和post创建自定义泛型

问题描述 投票:0回答:1

我正在考虑重构我的代码,因为我认为我重复过多的代码行。在下面的这个实例中,我已经为GET模型实现了PUTDELETEUnit的基于类的视图。稍后我将为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)
django python-3.x django-rest-framework django-generic-views
1个回答
1
投票

你可以使用viewsets.ModelViewSet。而且您不需要编写每个方法(获取,放置,删除,更新)

© www.soinside.com 2019 - 2024. All rights reserved.