Django Rest Framework: передача контекста в наборах - PullRequest
2 голосов
/ 03 апреля 2020

Viewsets удобны, потому что мы можем делать такие вещи и получать полностью работающий сериализатор:

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?

1 Ответ

2 голосов
/ 03 апреля 2020

По умолчанию request отправляется любому Generi c View и ViewSet. Вы также можете проверить исходный код в 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
...