Django
django ViewSet 사용 댓글 작성 및 불러오기
JOOHUUN
2022. 6. 20. 20:25
1. blog / models.py
class Article(models.Model):
user = models.ForeignKey('user.User', verbose_name="작성자", on_delete=models.CASCADE)
title = models.CharField("제목", max_length=50)
category = models.ManyToManyField(Category, verbose_name="카테고리")
contents = models.TextField("본문")
start_date = models.DateTimeField("노출 시작일", auto_now_add=True)
end_date = models.DateTimeField("노출 종료일", null=True, blank=True)
def __str__(self):
return f"{self.title} / {self.user.username} / " + str(self.start_date)
class Comment(models.Model):
user = models.ForeignKey('user.User', verbose_name="작성자", on_delete=models.CASCADE)
article = models.ForeignKey(Article, verbose_name="작성자", on_delete=models.CASCADE)
contents = models.TextField()
def __str__(self):
return f"{self.article.title} / {self.contents}"
2. blog / serializers.py
class CommentSerializer(serializers.ModelSerializer):
user = serializers.SerializerMethodField()
def get_user(self, obj):
return obj.user.username
class Meta:
model = Comment
fields = "__all__"
class ArticleSerializer(serializers.ModelSerializer):
category = serializers.SerializerMethodField()
commnets = CommentSerializer(many=True, source="comment_set")
def get_category(self, obj):
return [category.name for category in obj.category.all()]
class Meta:
model = Article
fields = "__all__"
3. blog / views.py
class CommentsView(viewsets.ModelViewSet):
queryset = Comment.objects.all()
serializer_class = CommentSerializer
def perform_create(self, serializer):
serializer.save(user = self.request.user)
4. blog / urls.py
- Article은 ViewSet을 사용하지 않음
from .views import CommentsView
from rest_framework.routers import DefaultRouter
router = DefaultRouter()
router.register('comment', CommentsView, basename='comment') # (댓글)
urlpatterns = [
path('article/', views.ArticleView.as_view()),
path('', include(router.urls)),
]
5. 포스트맨으로 실험