在Django中使用Django Rest框架为get、update、delete和post创建自定义泛型

在Django中使用Django Rest框架为get、update、delete和post创建自定义泛型,django,python-3.x,django-rest-framework,django-generic-views,Django,Python 3.x,Django Rest Framework,Django Generic Views,我正在考虑重构我的代码,因为我认为我重复了太多的代码,最后导致了一行行代码。以下面这个例子为例,我已经为单元模型实现了一个基于类的视图,用于获取,放置,以及删除。稍后,我将为部门创建另一个视图来执行CRUD,并将遵循相同的模式,是否有一种方法可以创建自定义通用模型视图,以便在任何其他视图中动态使用 class UnitDetailView(generics.RetrieveAPIView): """ Class based view for Unit Details. """

我正在考虑重构我的代码,因为我认为我重复了太多的代码,最后导致了一行行代码。以下面这个例子为例,我已经为
单元
模型实现了一个基于类的视图,用于
获取
放置
,以及
删除
。稍后,我将为
部门
创建另一个视图来执行
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)

您可以使用
viewset.ModelViewSet
。您不需要编写每个方法(get、put、delete、update)

我必须重写这些方法来添加
org\u id
函数get\u auth()返回经过身份验证的用户登录的组织id。因此,使用视图集还需要我自定义上述方法,以便添加org_id=get_auth(request)@pmutua-get_auth()来自哪里?这是我实现的自定义函数。@pmutua-然后提供其代码。很难说,如果默认行为有帮助的话,在我不了解完整代码的情况下,我实现的方法是定制djangorestframework的mixin以满足我的需要,而且它是有效的。