NESTしたAPIを作成する (メモ)
django rest frameworkでAPIを作る際に、ForeignKeyで繋いだModelをネストした形で送る方法をメモしておきたいと思います。
まずはmodels.py
from django.db import models
#models
class University(models.Model):
name = models.CharField(max_length=255)
address = models.CharField(max_length=255)
built_year = models.IntegerField()
num_of_faculty = models.IntegerField()
class Faculty(models.Model):
university = models.ForeignKey(University, related_name='faculty', on_delete=models.CASCADE)
name = models.CharField(max_length=50)
about = models.CharField(max_length=400)
num_of_professor = models.IntegerField()
num_of_students = models.IntegerField()
次に、serializers.py
from rest_framework import serializers
from .models import University, Faculty
#serializers
class FacultySerializer(serializers.ModelSerializer):
class Meta:
model = Faculty
fields = ['name', 'about', 'num_of_professor', 'num_of_students']
class UniversityFacultySerializer(serializers.ModelSerializer):
faculty = FacultySerializer(many=True, read_only=True)
class Meta:
model = University
fields = ['id' ,'name', 'address', 'built_year', 'num_of_faculty', 'faculty']
次に、views.py
from rest_framework import viewsets
from .models import University
from .serializer import UniversityFacultySerializer
#views
class UniversityFacultyViewSet(viewsets.ModelViewSet):
queryset = University.objects.all()
serializer_class = UniversityFacultySerializer
最後にurls.py
from django.urls import path
from .views import *
# urls
urlpatterns = [
path('university-faculty-nest/', UniversityFacultyViewSet.as_view({'get': 'list'})),
]
このようにすれば簡単にネストされたAPIを作ることができます!
重要なことは、models.pyのrelated_nameとserializer.pyの子の変数を一緒にすることです。そうしないとうまくネストされません.......
参考にしたページはこちらです。