본문 바로가기
django

2020.09.27_django_댓글 수정,삭제, 대댓글

by 해맑은 코린이 2020. 9. 28.

2020.09.26_django_댓글 수정,삭제, 대댓글_정리노트

 

 

 

 

오늘은 저번에 했던 댓글에서 수정, 삭제와 함께 대댓글 다는 거 정리정리 비슷하지만 , 내 딴에서는 조금 헷갈려서 간단하게 정리하려고 함!

 

먼저 댓글 다는 포스팅 

korinkorin.tistory.com/27

 

2020.09.17_django_댓글 구현

2020.09.17_django_댓글 구현_정리노트 오늘은 그저께 정리했던 Foreign Key 를 써서 드디어 댓글 구현을 해보게씀!!!!! 짝짝 그러면 먼저 댓글 모델부터 작성하러 ㄱㄱ models.py Comment 모델 작성 ForeignKey..

korinkorin.tistory.com

 

이거 먼저 보고 다시 정리정리 

 

먼저 댓글 수정으로 ㄱㄱ

 

 

여기서 데코레이터는 저번에 썼음 ㅇㅇ 로그인 한 유저만 마찬가지로 수정을 할 수 있어야 하므로

 

기존 update 와 거의 비슷하기 때문에, 주석은 따로 달지않고, 여기서 차이점은 매개변수를 2개가 아닌 3개를 받아와 준다는건데, 댓글을 다는 게시물의 아이디 ( post_id ) 와 내가 수정하려는 댓글의 아이디 ( com_id ) 를 가져오는 거지!!!!

 

그래서 내가 수정하려는 댓글의 아이디를 들고와서 폼에다가 instance로 넣어준다. 

나머진ㄴ 유효성 검사ㅇㅇㅇ!! 그래서 해당 아이디의 게시물로 redirect 해주기! 또 템플릿에서는 댓글폼 들고올거니까 com_form 딕셔너리로 가져와주고, review_update.html 을 생성해줘서 거기다가 com_form 을 띄우면, 기존 댓글의 내용과 함께 폼이 또 들거다 ! 

 

이제 html로 가서 연결만 시켜줍씨다

 

detail.html

 

 

디테일 페이지로 가서 이렇게 id 값을 가져와서 띄워줄건데, 헷갈리지 말아야할 것은, 여기서 my_post 는 

 

 

 

 

우리가 디테일에서 들고온 이 my_post의 아이디를 의미해서 이 게시물의 id 값을 말하는 것이고, 댓글을 수정해서 해당 댓글로 돌아오기 위함이다. 

 

 

 

 

 

comment.id 는 여기서 하나하나 가져온 댓글들의 id 를 가져와서 지금 내가 수정해주는 댓글의 id를 알게 해줬다. 

 

 

review_update.html

 

 

이제 update_form 을 띄워줄 html 을 만들고, 여기서 우리가 뷰에서 딕셔너리로 들고 왔던 com_form만 띄워주면 됨!!!

 

매개 변수가 하나 늘고 참조해주는 것들이 마구잡이라서 조금 힘들겠지마눈... 찬찬히 익히면서 하면 나도 언젠가는 안 헷갈리겠지..! 껄껄 하고 있는 나도 헷갈린다..휴 

 

 

마지막!!!! url 연결 ㄱㄱ

 

 

 

쟌쟌 이렇게 id 값도 같이 연결 시켜주고 실행 ㄱㄱ

 

 

 

 

 

 

 

 

 

짝짝 잘 수정이 되는구만 자 이제 옆에 있는 삭제도 해주러 갑씨다 삭제도 업뎃이랑 비슷하고 더 간단하니 촥촥 넘어갑시다

 

 

 

똑같이 연결해주고, 얘는 지워줄거라 별도의 html 없이 지워주는 함수만 실행시켜주면 됨!

 

 

 

 

 

삭제는 그냥 댓글의 id를 가져와서 해당 댓글에 요청이 들어오면 그 객체를 삭제 해주고, detail 페이지로 렌더링만 하면 된다!

 

 

 

 

이렇게 url 도 연결시켜주면!

 

 

 

 

 

 

이렇게 삭제가 잘 됨미다 깔깔

 

뭐 내가 이렇게 길게 써놨지만, 사실 항상 하는 CRUD 의 연장선일뿐... 혼자 그냥 더 연습하는용으로 이거는 포스팅 한거구, 

본격적으로 대댓글을 만들어봅씨다!

 

 


 

 

 

 

모델을 하나 만들어서 대댓글을 만들 필드를 생성! 마찬가지로 한 댓글에 대댓글을 여러개 다는 1 : N 관계 이므로 Comment를 FK로 참조해주고, 댓글 필드를 body로 시간 생성해주는 것을 update_at 필드! 

 

이렇게 만들어주고, 

 

 

 

이렇게 적어주고,

 

 

 

 

이 폼을 이제 우리는 유효성 검사를 해서 저장해주고 redirect  를 이용해서 detail 페이지로 돌아가게 하면 된다!

 

 

 

이번에는 띄워줄때 다른 방법을 사용해보았다!

 

 

보면 우리는 원래 for문으로 들고와서 

 

{{recom.body}} 

{{recom.updated_at}}

 

 

이렇게 써줬었는데, 

 

보면 여기서는 label이 즉 , 이름이 comment 가 아닌 필드만을 가져오자 이런 말인데, ( 대문자 주의! )

이 방법을 여기서는 굳이 안써도 되는데, 만약 필드가 많은 것들을 띄워줄 때는 특정 필드 제외 가져오자고 할 때는 이런 식으로 써야 훨씬 유용하기 때문에 이런 방법도 배워서 써보았음!

 

또한 hidden 으로 id를 숨기고, name 은 넘겨주는 field 이름인 comment로 적어주었다!

그래서 사용자에게는 id를 보여주지 않지만, 우리는 이미 id를 가져와서 지정해준 셈.

 

 

 

또한 대댓글을 하나하나 보여줘야하니, for문을 쓰고 하나하나씩 화살표를 달아서 보여줘라라고 form의 밑에 적어줬다!

 

 

 

 

 

여기서도 또한 우리는 이미 모델과 모델폼에서 comment를 fk를 통해 참조해 왔으므로, 우리는 post_id 만 들고오면 된다.

 

 

 

자!!!! 진짜 실행 ㄱㄱ

 

 

 

이렇게 해당 작성된 댓글 밑에 대댓글 입력 폼이 뜨게 되고,

 

 

 

 

 

짝짝 이렇게 잘 달리는 것을 볼 수가 있다...! 짝짝

 

 

 

 

오늘은 그동안 알았던 것들을 응용해서 댓글의 수정, 삭제, 대댓글 까지 구현해보았는데, 사실 우리는 여기서 시간도 안띄워줬고, 유저 또한 참조를 안했기 때문에 아직 보완할 점들이 많은 것 같다! 더더 응용한 버전도 공부 해서 돌아와야지 오늘은 그만..총총

'django' 카테고리의 다른 글

2020.10.07_django 검색 기능 구현하기  (2) 2020.10.08
2020.10.05_django paging  (0) 2020.10.05
2020.09.23_django_좋아요 기능 구현  (0) 2020.09.24
2020.09.19_django_class CRUD  (0) 2020.09.19
2020.09.17_django_댓글 구현  (0) 2020.09.17

댓글