Передавать параметр в serilazer под ListModelMixin

Я передаю параметр в серилайзер следующим образом:

serializer = AttractionTicketSerializer(attraction, context={'api_consumer':request.auth.application})

У меня есть представление, которое наследуется от ListModelMixin, мне нужно передать этот параметр контекста также и в серилизатор.

Вот обобщенный взгляд:

class AttractionView(mixins.ListModelMixin, generics.GenericAPIView):
    authentication_classes = AUTHENTICATION_CLASSES
    permission_classes = [IsAuthenticatedOrTokenHasReadWriteScope]
    queryset = Attraction.objects.all()
    serializer_class = AttractionSerializer

    def get(self, request: Request, *args, **kwargs):
        attractions: Dict[str, Any] = self.list(request, *args, **kwargs)
        return attractions

Есть ли способ сделать это?

Заранее благодарю

Вы можете переопределить функцию get_serializer_context(), чтобы добавить дополнительный контекст для передачи сериализатору, если он не получен из вашего запроса.

class AttractionView(mixins.ListModelMixin, generics.GenericAPIView):
    <...already_defined_attributes...>

    def get_serializer_context(self):
        context = super().get_serializer_context()
        context.update({
            'new_key': <new_value>
        })

        return context

если дополнительный контекст, который вам нужно передать, получен из вашего запроса. Тогда вы можете переопределить функцию list

def list(self, request, *args, **kwargs):
    queryset = self.filter_queryset(self.get_queryset())
    page = self.paginate_queryset(queryset)

    context = self.get_serializer_context()
    context.update({
        'new_key': 'new_value'
    })

    if page is not None:
        serializer = self.get_serializer(page, context=context, many=True)
        return self.get_paginated_response(serializer.data)

    serializer = self.get_serializer(queryset, context=context, many=True)
    return Response(serializer.data)
Вернуться на верх