우선 게시물과 유저의 관계는 다음과 같다.
그렇다면 게시물과 댓글과의 관계, 댓글과 유저의 관계를 알아보자.
# blog/models.py
class Comment(models.Model):
blog = models.ForeignKey(Blog, null = True, on_delete=models.CASCADE, related_name="comments")
comment_user = models.ForeignKey(CustomUser, null=True, on_delete=models.CASCADE)
comment_body = models.CharField(max_length=200)
comment_date = models.DateTimeField()
class Meta:
ordering = ['comment_date'] # 댓글은 최신이 가장 아래에 있도록 해야한다.
related_name
: Blog의 입장에서 comment를 불러내고자 할 때 쓰이는 이름을 지정한다.
Blog, CustomUser를 각각 Comment와 ForeignKey로 묶어준다!
ordering = ['comment_date']
: 댓글을 적은 순서대로 나열하게 된다.
# blog/urls.py
...
path('newreply', views.newreply, name="newreply"),
# blog/views.py
def newreply(request):
if request.method == "POST":
comment = Comment()
comment.comment_body = request.POST['comment_body']
comment.blog = Blog.objects.get(pk=request.POST['blog'])
author = request.POST['user']
print(type(author2), author2)
if author:
comment.comment_user = CustomUser.objects.get(username=author)
else:
return redirect('blog:detail', comment.blog.id)
comment.comment_date = timezone.now()
comment.save()
return redirect('blog:detail', comment.blog.id)
else:
return redirect('home')
/* blog/detail.html */
<form method="POST" action="/blog/newreply">
{% csrf_token %}
<input type="hidden" value="{{blog.id}}" name="blog" />
<input type="hidden" value="{{user.username}}" name="user" />
댓글 작성 : <input type="text" name="comment_body" />
<button type="submit" class="btn btn-secondary">작성</button>
</form>
{% for comment in blog.comments.all %}
<p><span> {{comment.comment_user}} </span> : {{ comment.comment_body }}</p>
<p>위 댓글을 단 시간 : {{comment.comment_date}}</p>
{% endfor %}