Обновление queryset с учётом связанной модели level

Если level — ForeignKey или OneToOneField курса, задайте queryset = Course.objects.select_related('level').all(). Это загрузит связанные уровни без дополнительного запроса на каждый курс.

Короткий ответ

Что ответить на собеседовании

Если level — ForeignKey или OneToOneField курса, задайте queryset = Course.objects.select_related('level').all(). Это загрузит связанные уровни без дополнительного запроса на каждый курс.

Подробный разбор

Ответ с пояснениями

Условие

Необходимо снять комментарий со строки, определяющей queryset, и адаптировать её так, чтобы при выборке учитывался связанный объект level. Ниже приведён исходный фрагмент кода, который следует откорректировать:

from api.serializers import CourseSerializer

class CourseViewSet(viewsets.ModelViewSet):
    serializer_class = CourseSerializer
    # queryset = Course.objects.all()
    permission_classes = (AllowAny,)

После выполнения задания запрос должен возвращать объекты курса вместе с их уровнем.

Ответ

Если level — ForeignKey или OneToOneField курса, задайте queryset = Course.objects.select_related('level').all(). Это загрузит связанные уровни без дополнительного запроса на каждый курс.

Минимальное изменение:

class CourseViewSet(viewsets.ModelViewSet):
    serializer_class = CourseSerializer
    queryset = Course.objects.select_related('level').all()
    permission_classes = (AllowAny,)

Модель Course, viewsets и AllowAny должны быть импортированы. select_related оптимизирует получение данных, но не меняет автоматически JSON: отображение уровня определяет CourseSerializer. Для множественной или обратной связи нужен prefetch_related вместо select_related. Отдельно проверьте права: AllowAny вместе с ModelViewSet разрешает не только чтение, но и изменяющие действия, если они не ограничены другим способом.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее