У меня возникли проблемы с разработкой конечной точки 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