Я создал API с помощью DRF, который может отображать и просматривать определенные записи на основе указанного шаблона URL. Например:
для запроса:
curl -v http://127.0.0.1:8000/get_details/120001/
Я могу получить ответ:
[
{
"subject": "Data Structures",
"course": "CSE"
},
{
"subject": "Thermodynamics",
"course": "Chemistry"
},
{
"subject": "Organic Chemistry",
"course": "Chemistry"
},
{
"subject": "Optics",
"course": "Physics"
}
]
Где '120001' - user_id, в базе данных выполняется поиск против. Но я хочу получить ответ в следующем формате:
{'Chemistry': ['Thermodynamics', 'Organic Chemistry'], 'CSE': ['Data Structures'], 'Physics': ['Optics']}
(по содержанию, я не рассматриваю отступы и другие факторы)
Хотя я могу написать код для логики c о том, как создать и заполнить этот словарь, Я не могу понять, как вернуть его в качестве ответа и откуда.
Я использую generics.ListAPIView как класс просмотра.
Вот моя модель (models.py):
class Subject(models.Model):
user_id = models.CharField(null = False, max_length=10)
subject = models.CharField(max_length=50)
course = models.CharField(max_length=50)
def __str__(self):
return self.subject
Сериализатор (serializers.py):
class SubjectSerializer(serializers.ModelSerializer):
class Meta:
model = Subject
fields = ['subject', 'course']
и, views.py (для первого вывода в формате по умолчанию):
class SubjectView(generics.ListAPIView):
serializer_class = SubjectSerializer
def get_queryset(self):
username = self.kwargs['user_id']
return Subject.objects.filter(user_id = username).only('subject','course')
Я написал логи c для создания словаря для отправки в качестве ответа ( как описано в моем желаемом выводе) путем извлечения значений с использованием Subject.objects.values (....) и последующим циклическим просмотром результатов для создания моего словаря, но я просто не понимаю, где (то есть в какую функцию) записать его и вернуться из.
Есть ли какая-либо функция, предоставляемая классом generics.ListAPIView, которая позволяет мне это делать? А если нет, то какой другой альтернативный подход я могу попробовать?
Я абсолютный новичок в Django, и любая помощь будет оценена. Кроме того, будет очень полезно, если кто-нибудь может предложить мне практическое руководство / учебное пособие / список воспроизведения, из которого я могу изучить DRF на примерах кода, чтобы ускорить процесс обучения.
Спасибо!