TIL 240403

hyeo71·2024년 4월 3일
0

2024 내배캠 AI 트랙

목록 보기
67/108

게시물 만들기(2)

필수 요구사항

  • 게시물 CRUD
  • 댓글 CRUD3
    • Create
    • Read
    • Update
    • Delete

선택 요구사항

  • 관리자의 게시글 권한
  • 비밀글 작성기능
  • 조회수 많은 순, 최신순 정렬 조회
  • 회원가입, 로그인
  • 좋아요 기능
  • 유저 프로필 이미지 기능
  • 게시글에 이미지 첨부
  • 외부 API 사용

댓글 만들기

  • posts 앱의 models.py, forms.py, urls.py, views.py에 댓글 관련 코드 추가하기

models.py

class Comment(CommonModel):
    content=models.TextField()
    post=models.ForeignKey(Post, related_name='comments', on_delete=models.CASCADE)
    
    def __str__(self):
        return f'{self.content}-{self.post}' 

forms.py

class CommentForm(forms.ModelForm):
    class Meta:
        model = Comment
        fields = ("content",)

    def save(self):
        comment = super().save(commit=False)
        return comment

views.py에서 form을 저장한 뒤 comment에 해당 게시물의 데이터를 추가하고 DB에 저장해야 하기 때문에 form.save()는 DB에 저장하지 않기 위해 사용

urls.py

from django.urls import path
from . import views

app_name = "posts"

urlpatterns = [
    # 게시물
    ...
    # 댓글
    path("comments/write/<int:post_id>/", views.comment_create, name="comment-create"),
]

views.py

# 댓글 생성
def comment_create(request, post_id):
    if request.method == "POST":
        form = CommentForm(request.POST)
        post = Post.objects.get(id=post_id) # 댓글이 어떤 게시물의 댓글인지 확인
        if not post:
            return redirect("posts:list")
        if form.is_valid():
            comment = form.save()
            comment.post = post
            comment.save()
            messages.success(request, "Post reviewed")
            return redirect("posts:detail", post_id=post.id)
    else:
        form=CommentForm()
    return render(request, "posts/comment_form.html", {"form": form})

0개의 댓글