【发布时间】:2018-09-16 07:25:09
【问题描述】:
我正在运行 Django 2.0 和 DRF (Django REST Framework) 3.8.0。
我希望能够以特定格式获取 JSON,如 GOAL NESTED JSON ARRAY 中所示。
现在,我可以检索一个 JSON 数组,如 MY CURRENT JSON ARRAY 中所示。我已经检查了这个 question,似乎我们有目标,但我无法成功。
下面有我的模型、视图和序列化程序。 这是通过使用这个来实现的:
GET /studentlectures/1/get_studlect/ 其中 1 是 {pk}
当前 JSON 数组:
[
{
"id": 1,
"lecture": 1,
"student": 1
},
{
"id": 19,
"lecture": 4,
"student": 1
}
]
目标嵌套 JSON 数组
{
"id": 1,
"student_code": "60637-009",
"first_name": "Zoltan",
"last_name": "Drogo",
"lectures": [
{
"lecture_id": 1,
"subject_name": "English",
"teacher_id": 1,
"teacher_name": "Cirillo Kierans",
"room": "Room A",
"schedule": "08:00 AM - 10:00 AM"
},
{
"lecture_id": 2,
"subject_name": "Math",
"teacher_id": 3,
"teacher_name": "Johanna Probate",
"room": "Room C",
"schedule": "08:00 AM - 10:00 AM"
},
. . . . . .
}
型号:
class Studentlecture(models.Model):
student = models.ForeignKey(Student, default='')
lecture = models.ForeignKey(Lecture, default='')
studentlecture_name = models.CharField(max_length=20, default='ComputerScience Lectures')
def __str__(self):
return f'{self.studentlecture_name}'
查看:
class StudentlectureViewSet(ModelViewSet):
"""
API endpoint that allows groups to be viewed or edited.
"""
serializer_class = StudentlectureSerializer
queryset = Studentlecture.objects.all()
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
#/studentlectures/{pk}/get_studlect/ gives the lectures of student pk
@action(detail=True)
def get_studlect(self, request, *args, **kwargs):
student_lectures = Studentlecture.objects.all().filter(student_id=self.kwargs['pk'])
serializer = self.get_serializer(student_lectures, many=True)
return Response(serializer.data)
#/studentlectures/{pk}/get_lectstud/ gives the students of lecture pk
@action(detail=True)
def get_lectstud(self, request, *args, **kwargs):
lecture_students = Studentlecture.objects.all().filter(lecture_id=self.kwargs['pk'])
serializer = self.get_serializer(lecture_students, many=True)
print(serializer)
return Response(serializer.data)
序列化器:
class StudentlectureSerializer(serializers.ModelSerializer):
class Meta:
model = Studentlecture
fields = ('url', 'id', 'lecture', 'student')
【问题讨论】:
标签: python json django api django-rest-framework