Передавать параметр в 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)