Как передать запрос в качестве аргумента сериализатору в поле метода сериализатора

У меня есть основной сериализатор, и у меня также есть сериализатор для моей модели BOOK, поэтому я сделал метод для возврата сериализованного набора запросов, используя мой BOOK SERIALIZER. НО проблема в том, что ** я не могу получить доступ к моему основному контексту сериализатора через BookSerializer**. Что я могу сделать?

Views.py:

class BookMainPage(ListModelMixin, RetrieveModelMixin, GenericViewSet):
    queryset = Book.objects.select_related('owner').all()

    def get_serializer_context(self):
        return {'user': self.request.user, 'book_id': self.kwargs.get('pk'), 'request': self.request}

    def get_serializer_class(self):
        if self.kwargs.get('pk') is None:
            return MainPageSerializer
        return BookComplexSerializer

MainPageSerializer:

class MainPageSerializer(serializers.Serializer):
    @staticmethod
    def get_new_books(self):
        return BookSimpleSerializer(Book.objects.all().order_by('-created_at')[:10], many=True).data

    @staticmethod
    def get_popular_books(self):
        return BookSimpleSerializer(Book.objects.all().order_by('-bookRate')[:10], many=True).data

    @staticmethod
    def get_most_borrowed(self):
        return BookSimpleSerializer(Book.objects.all().order_by('-wanted_to_read')[:10], many=True).data

    new_books = serializers.SerializerMethodField(method_name='get_new_books')
    popular_books = serializers.SerializerMethodField(method_name='get_popular_books')
    most_borrowed_books = serializers.SerializerMethodField(method_name='get_most_borrowed')

BookSimpleSerializer:

class BookSimpleSerializer(serializers.ModelSerializer):
    class Meta:
        model = Book
        fields = ['id', 'picture']

    def get_picture(self, obj: Book):
        request = self.context['request']
        photo_url = obj.picture.url
        return request.build_absolute_uri(photo_url)

    picture = serializers.SerializerMethodField(method_name='get_picture')


class CategorySimpleSerializer(serializers.ModelSeria

Вы можете инициализировать свой сериализатор, передав контекст с запросом в методе MethodField:

class MainPageSerializer(serializers.Serializer):
    def get_new_books(self):
        return BookSimpleSerializer(
            Book.objects.all().order_by('-created_at')[:10], 
            many=True, 
            context={"request": self.context["request"]}
        ).data

    def get_popular_books(self):
        return BookSimpleSerializer(
            Book.objects.all().order_by('-bookRate')[:10], 
            many=True, 
            context={"request": self.context["request"]}
        ).data

    def get_most_borrowed(self):
        return BookSimpleSerializer(
            Book.objects.all().order_by('-wanted_to_read')[:10], 
            many=True, 
            context={"request": self.context["request"]}
        ).data

    new_books = serializers.SerializerMethodField(method_name='get_new_books')
    popular_books = serializers.SerializerMethodField(method_name='get_popular_books')
    most_borrowed_books = serializers.SerializerMethodField(method_name='get_most_borrowed')

И я удаляю декоратор staticmethod. Ваш метод не обязательно должен быть статическим

Вернуться на верх