Estoy diseñando una API para un proyecto de E-learning. La plataforma permite a los estudiantes realizar pruebas en línea. Las pruebas contienen preguntas y las preguntas pueden tener múltiples opciones. A continuación se muestra el esquema de mi aplicación:
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)Ahora, el problema es que quiero crear un punto final para las opciones seleccionadas de los estudiantes que regresan según el usuario solicitante.
/test/<int:test_id>/student-answers/Por ejemplo, si algún usuario quiere obtener sus respuestas para la identificación de prueba 1, irá a /test/1/student-answers/ (El usuario se extraerá del objeto de solicitud, porque estoy usando autenticación de token)
Pero no puedo filtrar las opciones seleccionadas relacionadas con la identificación de prueba y el usuario. ¿Alguien me puede ayudar?
Para devolver un conjunto de consultas filtrado en DRF APIVIew, puede anular el método get_queryset de esta manera:
Suponga que ya tiene un 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 Nota: puede recorrer "caminos de relación" usando la sintaxis __ de Django para filtrar campos en un modelo relacionado. EX: question__test_id en su caso. Más información sobre el filtro DRF . Y el filtro Django a través de la clave externa