🧩 Django 댓글 API 흐름 완전 정복
🎯 목표
특정 블로그 글에 달린 댓글만 조회하는 API의 흐름을 시각적으로 이해하자!
🛠️ 사용하는 클래스
class CommentListCreateAPIView(ListCreateAPIView):
queryset = Comment.objects.all()
serializer_class = CommentSerializer
permission_classes = [IsAuthenticatedOrReadOnly]
def get_queryset(self):
queryset = super().get_queryset()
blog = self.get_blog_object()
return queryset.filter(blog=blog)
def get_blog_object(self):
return get_object_or_404(Blog, pk=self.kwargs.get('blog_pk'))
🔍 주요 흐름 설명
단계설명
1️⃣ 클라이언트 요청 |
/blogs/5/comments/ 같은 URL로 GET 요청 발생 |
2️⃣ View 실행 |
CommentListCreateAPIView가 실행됨 |
3️⃣ get_queryset 호출 |
댓글 리스트를 가져오기 위해 이 메서드가 자동 호출됨 |
4️⃣ get_blog_object 실행 |
URL에서 blog_pk=5 값을 꺼냄 → 해당 블로그 글 객체 조회 |
5️⃣ 전체 댓글 가져오기 |
Comment.objects.all() ← 전체 댓글 쿼리셋 불러오기 |
6️⃣ filter(blog=blog) |
해당 블로그에 달린 댓글만 필터링 |
7️⃣ 직렬화 및 응답 |
JSON 형식으로 클라이언트에게 전달 |
🧠 핵심 정리
- queryset = Comment.objects.all() → 댓글 테이블 전체를 기본 쿼리셋으로 설정
- filter(blog=blog) → 특정 블로그 글에 해당하는 댓글만 뽑음
- blog = self.get_blog_object() → URL에서 blog_pk 값을 꺼내 블로그 글 객체를 찾음
- 모든 핵심은 ForeignKey 관계가 정의되어 있기 때문!
🗺️ 흐름도 보기
✅ 마무리 요약
질문 |
답변 |
댓글은 어디서 지정함? |
queryset = Comment.objects.all() |
왜 blog=blog가 가능한가? |
Comment 모델에 blog = ForeignKey(Blog)로 연결돼 있어서! |
어떤 블로그 글에 달린 댓글만 보게 하는 방법은? |
.filter(blog=blog) 로 필터링 |