首页 > 解决方案 > Django Rest 框架:在视图集中传递上下文

问题描述

视图集很方便,因为我们可以做这样的事情并获得一个完全工作的序列化器:

class StoreObjectViewSet(mixins.ListModelMixin, mixins.RetrieveModelMixin, viewsets.GenericViewSet):
    permission_classes = [IsAuthenticated]
    queryset = StoreObject.active_objects.all()
    serializer_class = serializers.StoreObjectSerializer

不幸的是,据我所知,要将上下文传递给序列化程序,我们需要执行以下操作:

PostSerializer(data=request.data, context={'request': request})

这意味着我们需要手动覆盖 ViewSets 提供的每个方便的方法(据我所知)。有没有办法将上下文注入每个序列化程序,同时仍然保持 Viewsets 方便?

标签: pythondjangodjango-rest-framework

解决方案


默认情况下,request被发送到任何通用视图和视图集。您也可以在GitHub中查看源代码。因此,您不必在每个视图中都注入它们。如果要传递额外的上下文,请覆盖get_serializer_context(...)方法:

class StoreObjectViewSet(mixins.ListModelMixin, mixins.RetrieveModelMixin, viewsets.GenericViewSet):
    ...

    def get_serializer_context(self):
        context = super().get_serializer_context()
        context['custom_context'] = 'Your custom context'
        return context

推荐阅读