포스트 좋아요 모음 메소드 :
모든 좋아요를 다가져와서 templates에 보내줍니다.
{% if post.liked_post.count > 0 %}
<br>
<br>
<p>추천: {{ post.liked_post.count }}</p>
<div class="btn-group">
<a href="{% url 'post:like' post.id %}" class="btn btn-info">추천인 명단</a>
</div>
{% else %}
<br>
<p>추천이 없습니다</p>
{% endif %}
.count는 내장된 장고의 기능으로 id를 세어저 반환해준다.
그래서 모델안에 따로 COUNT관련 값을 넣어주지 않은것. => 충돌이 일어날 확률이 높아.
def like_list(request, post_id):
list = PostLike.objects.filter(post_id=post_id)
return render(request, "post/like_list.html", {"list": list})
코멘트 좋아요 모음 메소드:
위의 포스트 좋아요와 같은 방식으로 활용
def commentlike_list(request, comment_id):
list = CommentLike.objects.filter(comment_id=comment_id)
return render(request, "post/like_list.html", {"list": list})
코멘트 생성 메소드:
def detail(request, post_id):
post = get_object_or_404(Post, id=post_id)
comments = Comments.objects.filter(post_id=post_id)
#댓글 모델에서 그 포스트에 있는 모든 댓글을 가져오게함
if request.method == "GET":
form = CommentForm(request.POST)
return render(
request,
"post/detail.html",
{
"post": post,
"comments": comments,
"form": form,
"MEDIA_URL": settings.MEDIA_URL,
},
)
#포스트
else:
#template안에 폼으로 요청하는 것들이 많아서 따로 NAME을 설정해서 받아주었다.
#따로 Url설정하고 메소드 생성해서 하는것도 더 깔금 했을것
#댓글 저장
if request.method == "POST" and "wow12" in request.POST:
if request.user.is_authenticated:
form = CommentForm(request.POST)
if form.is_valid:
comment = form.save(commit=False)
comment.author = request.user
comment.post = post
comment.save()
return redirect("post:detail", post_id=post.id)
else:
form = CommentForm()
return render(request, "post/detail.html", {"form": form})
else:
return redirect("post:detail", post_id=post.id)
#포스트 좋아요 저장
if request.method == "POST" and "wow11" in request.POST:
if request.user.is_authenticated:
# 이미 좋아요 누른 게 있느지 확인해서 있으면 똑같은 페이지로 돌아가기
if request.user in post.liked_post.all():
return redirect("post:detail", post_id=post.id) #중복방지
# 아니면 좋아요 눌러주는거 저장
else:
like = PostLike.objects.create(user=request.user, post=post)
like.save()
return redirect("post:detail", post_id=post.id)
else:
return redirect("post:detail", post_id=post.id)
#댓글 좋아요 저장
if request.method == "POST" and "wow13" in request.POST:
if request.user.is_authenticated:
comment_id = request.POST.get("comment_id")
comment = Comments.objects.get(id=comment_id)
#이미 좋아요 누른사람은 그대로 돌아가
if request.user in comment.liked_comments.all():
return redirect("post:detail", post_id=post.id)
#아니면 좋아요 저장
else:
commentlike = CommentLike.objects.create(
user=request.user, comment=comment
)
commentlike.save()
return redirect("post:detail", post_id=post.id)
else:
return redirect("post:detail", post_id=post.id)
코멘트 수정 메소드:
똑같이 instance로 받아와서 저장
@login_required(login_url="login")
def comment_update(request, post_id, comment_id):
post = get_object_or_404(Post, id=post_id)
comments = Comments.objects.filter(post=post)
comment = get_object_or_404(Comments, id=comment_id)
#권한 설정
if request.user != post.author:
messages.error(request, "수정권한이 없습니다")
return redirect(reverse("post:detail", args=[post.id]))#kwargs={,}
if request.method == "POST":
comment_form = CommentForm(request.POST, instance=comment)
if comment_form.is_valid():
form = comment_form.save(commit=False)
form.author = request.user
form.post = post
#원래는 밑에 있는 comment가 스스로 저장이 되어야 하는데
#데이터 베이스에 저장이 안되서 직접 일입력해줌.
#아무래도 직접적인 post_id가 연결이 안되어서인건지 확실치 않지만,
# 앞으로 데이터베이스가 저장안될때는 직접 넣어줘야한다
form.comment = request.POST.get("content")
form.save()
#reverse("url", args= [], 또는 kwargs={딕셔너리형태=> key: 인수})
#reverse("post:detail", kwargs={}
return redirect(reverse("post:detail", args=[post.id]))
else:
comment_form = CommentForm(instance=comment)
return HttpResponse("Invalid comment_form", status=405)
#해당 글의 자신이 쓴 댓글에만 수정버튼을 달게하기 위해서 따로 생성
user_comments = Comments.objects.filter(post=post, author=request.user)
return render(
request,
"post/detail_update.html",
{"post": post, "comment": comment, "user_comments": user_comments},
)
코멘트 삭제 메소드:
포스트 삭제와 다를바 없지만
comment = get_object_or_404(Comments, id=comment_id)
커멘트에서 받아오는 인스턴스를 하나 추가해준것
@login_required(login_url="users:login")
def comment_delete(request, post_id, comment_id):
comment = get_object_or_404(Comments, id=comment_id)
post = get_object_or_404(Post, id=post_id)
if request.user != post.author:
messages.error(request, "삭제권한이 없습니다")
return redirect("post:detail", post_id=post.id)
else:
comment.delete()
return redirect("post:detail", post_id=post.id)