Django rest framework Viewset для одного элемента, а не списка

У меня возникла проблема с моим DRF API. Я хочу предоставить конечную точку только для чтения, которая принимает один идентификатор от объекта (документа) в БД, запускает скрипт для выполнения проверки и возвращает результат. Это прекрасно работает, когда я вызываю API с помощью //api/documentcheck/1/, где 1 - это pk документа в БД. Проблема в том, что если я просто вызываю базовый URL //api/documentcheck/, он пытается вернуть результаты всех документов в базе данных и завершает работу, потому что это занимает много времени.

Я ищу способ убрать представление списка и заставить пользователей указывать ID для проверки одного документа.

Это мой класс сериализатора

class DocumentCheckSerializer(serializers.Serializer):
    '''Serializer for document check'''
 
    class Meta:
        model = Document
        fields = '__all__'
 
    def to_representation(self, value):
        return process_document(value)

Вот мое мнение:

class DocumentCheck(viewsets.ReadOnlyModelViewSet):
    """Check a single document"""
    authentication_classes = (
    TokenAuthentication,
    SessionAuthentication,
    BasicAuthentication,
    )
    permission_classes = [IsAuthenticated]
    queryset = Document.objects.all()
    serializer_class = serializers.DocumentCheckSerializer

и запись моего маршрутизатора

router.register("documentcheck", views.DocumentCheck, basename="documentcheck")

Вместо того, чтобы использовать viewsets.ReadOnlyModelViewSet в качестве базового класса, используйте следующую установку

from rest_framework import mixins
from rest_framework.viewsets import GenericViewSet


class DocumentCheck(
    mixins.RetrieveModelMixin,
    mixins.ListModelMixin,
    GenericViewSet
):
    """Check a single document"""
    authentication_classes = (
        TokenAuthentication,
        SessionAuthentication,
        BasicAuthentication,
    )
    permission_classes = [IsAuthenticated]
    queryset = Document.objects.all()
    serializer_class = serializers.DocumentCheckSerializer

Вы можете использовать только GenericViewSet и RetrieveModelMixin в качестве базового класса

from rest_framework.viewsets import GenericViewSet
from rest_framework.mixins import RetrieveModelMixin

class DocumentCheck(GenericViewSet, RetrieveModelMixin):
    """Check a single document"""
    authentication_classes = (
    TokenAuthentication,
    SessionAuthentication,
    BasicAuthentication,
    )
    permission_classes = [IsAuthenticated]
    queryset = Document.objects.all()
    serializer_class = serializers.DocumentCheckSerializer
Вернуться на верх