728x90
class Comment(models.Model):
parent = models.ForeignKey('self', related_name='reply', on_delete=models.CASCADE, null=True, blank=True)
대댓글 모델을 굳이 추가할 필요 없이, 댓글 모델에 다음과 같이 스스로를 참조하는 코드를 작성하면,
그것이 곧 대댓글이 된다.
시리얼라이저에는 다음과 같이 함수를 오버라이딩해서 가져오면 된다.
class CommentSerializer(serializers.ModelSerializer):
reply = serializers.SerializerMethodField()
class Meta:
model = Comment
fields = ('board', 'id', 'user', 'parent', 'comment', 'created_at','reply')
read_only_fields = ['user']
# bind 함수를 통해 지속적으로 대댓글 안 대댓글 작성 가능
def get_reply(self, instance):
serializer = self.__class__(instance.reply, many=True)
serializer.bind('', self)
return serializer.data
함수에는 viewset을 사용할 경우 아래와 같이 작성할 수 있다.
viewset의 기본 기능 중 하나인 create를 사용해서 만들 수 있다.
class CommentViewSet(viewsets.ModelViewSet):
queryset = Comment.objects.all()
serializer_class = CommentSerializer
permission_classes = [permissions.IsAuthenticatedOrReadOnly]
def perform_create(self, serializer):
return serializer.save(user=self.request.user)
ViewSet을 썼으니 router를 이용하여 url을 작성해주면 대댓글 완성
'Framework > Django' 카테고리의 다른 글
ㅁㄴㅇㄹ (0) | 2023.07.20 |
---|---|
장고 50문 50답 채우기(1) (0) | 2023.07.14 |
장고 Q 사용 (Code Refactoring) (2) | 2023.06.23 |
taggit 공식 문서 읽어보기 (0) | 2023.06.21 |
Queryset method 정리 (1) | 2023.06.20 |