У меня возникли проблемы с разработкой конечной точки API для моего приложения Django (DRF).

Я разрабатываю API для проекта электронного обучения. Платформа позволяет студентам проходить онлайн-тесты. Тесты содержат вопросы, и вопросы могут иметь несколько вариантов. Ниже приведена схема для моего приложения:

Test:
    id: Primary Key
    duration: Integer
    created: Timestamp

Question:
    id: Primary Key
    serial: Integer
    test: Foreign Key (Test)
    body: Char Field

Option:
    id: Primary Key
    question: Foreign Key (Question)
    body: Char Field
    correct: Boolean Field

StudentSelectedOption:
    id: Primary Key
    question: Foreign Key (Question)
    student: Foreign Key (User)
    option: Foreign Key (Option)

Теперь проблема в том, что я хочу создать конечную точку для возврата выбранных студентами опций на основе запрашивающего пользователя

/test/<int:test_id>/student-answers/

Но я не могу отфильтровать выбранные параметры, связанные с идентификатором теста и пользователем. Кто-нибудь может мне помочь?

Чтобы вернуть отфильтрованный набор запросов на DRF APIVIew, вы можете переопределить метод get_queryset следующим образом :

Предположим, что у вас уже есть StudentSelectedOptionSerializer

from rest_framework.generics import ListAPIView

class StudentSelectedOptionListView(ListAPIView):
    serializer = StudentSelectedOptionSerializer

    def get_queryset(self):
        """
        This view should return a list of all answer of a specific test
        for the currently authenticated user.
        """

        user = self.request.user
        test_id = username = self.kwargs['test_id']
        queryset = StudentSelectedOption.objects.filter(question__test_id=test_id, student_id=user.id)
        return queryset

Примечание : Вы можете пройти по "путям отношений", используя __ синтаксис Django для фильтрации полей в связанной модели. EX: question__test_id в вашем случае. Более подробная информация о DRF фильтре. И Django filter trough foreign key

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