見出し画像

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を作ることができます!

画像1

重要なことは、models.pyのrelated_nameとserializer.pyの子の変数を一緒にすることです。そうしないとうまくネストされません.......

参考にしたページはこちらです。


この記事が気に入ったらサポートをしてみませんか?