중첩 nested serializer

GisangLee·2022년 2월 22일
0

drf

목록 보기
1/1
post-custom-banner

nested serializer

  • models.py
class Parent(models.Model):
    name = models.CharField(max_length=100)

    def __str__(self):
        return self.name

class Child(models.Model):
    name = models.CharField(max_length=20)
    parent = models.ForeignKey("Parent", on_delete=models.CASCADE, related_name="child")
    
    def __str__(self):
        return self.name

Parent (1) : Child (N) 의 관계

  • serializers.py
class ParentSerializer(serializers.ModelSerializer):
    child = ChildSerializer(many=True)
    
    class Meta:
        model = user_models.Parent
        fields = ("name", "child",)

class ChildSerializer(serializers.ModelSerializer):

    class Meta:
        model = post_models.Child
        fields = ("name",)

중첩 serializer 사용하는 이유

  • 원하는 데이터를 개별로 가져오기 힘든 상황이 생각보다 많다.
  • 하나의 모델에 관련된 데이터를 담아오는 api는 필요하다.
class ParentView(APIView):

    def get(self, request):
        parent =  Parent.objects.prefetch_related("child")
        serializer = ParentSerializer(parent, many=True)
        return Response(serializer.data, status=status.HTTP_200_OK)

1. 중첩 serializer 사용 시 반드시 해야할 일

  • 쿼리 최적화
profile
포폴 및 이력서 : https://gisanglee.github.io/web-porfolio/
post-custom-banner

0개의 댓글