DRF требуется слишком много времени для возврата вложенных сериализованных данных

У нас слишком много моделей, которые связаны между собой, При возврате набора запросов сериализация данных происходит слишком медленно (serializer.data). Ниже приведены наши модели и сериализатор.

Почему вложенный сериализатор django слишком долго возвращает ответ JSON. Что мы делаем неправильно?

models.py

views.py

class DoctorBySpecialityView(APIView):
    permission_classes = [IsAuthenticated]

    def get(self, request, *args, **kwargs):
        doctor = request.user
        specialties = Specialties.objects
        active_doctor = get_all_active_doctors().count()
        search = request.query_params.get(constants.SEARCH, None)
        context = {"me": doctor, "search": search}
        serialized_specialties = SpecialitiesWithListOfDoctors(
            specialties, many=True, context=context
        )
        data = {
            "specialties": serialized_specialties.data,
            "active_doctor": active_doctor,
        }

        response = get_response(
            status=status.HTTP_200_OK,
            status_code=ResponseStatus.success.value,
            data=data,
        )
        return Response(response, status=status.HTTP_200_OK)

serializers.py

Примечание: Это один из примеров. У нас слишком много подобных примеров. В этом примере я хочу получить все специальности со списком врачей, а врач сам по себе содержит свои достижения, место работы и многие другие модели

Обычно время сериализации не является проблемой для вложенных сериализаторов, но количество выполняемых запросов является проблемой.

Вам необходимо передавать оптимизированный набор запросов вашему сериализатору, используя select_related и prefetch_related, когда это возможно.

Начните с просмотра количества запросов, выполняемых для каждого запроса, я рекомендую Django Debug Toolbar

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