728x90
Comment(N) 모델과 User(1) 모델 간 관계 설정을 해보자!
"0개 이상의 댓글은 1개의 회원에 의해 작성될 수 있음"
목차
- 모델 관계 설정
- CREATE
- READ
- DELETE
- 인증된 사용자에 대한 접근 제한하기
1. 모델 관계 설정
Comment와 User간 모델 관계 설정
- Comment 모델에 User 모델을 참조하는 외래 키 작성
- 앞에서 USER - ARTICLE 모델 관계 설정 때와 마찬가지로 기존에 존재하던 테이블에 새로운 컬럼이 추가되어야 하는 상황이기 때문에 migrations 파일이 곧바로 만들어지지 않고 일련의 과정 필요
- 첫 번째 화면
- 기본적으로 모든 컬럼은 NOT NULL 제약조건이 있기 때문에 데이터가 없이는 새로 추가되는 외래 키 필드 user_id가 생성되지 않음
- 그래서 기본 값을 어떻게 작성할 것인지 선택해야 함
- 1을 입력하고 Enter 진행 (다음 화면에서 직접 기본 값 입력)
- 두 번째 화면
- comment의 user_id에 어떤 데이터를 넣을 것인지 직접 입력해야 함
- 마찬가지로 1 입력하고 Enter 진행
- 그러면 기존에 작성된 댓글이 있다면 모두 1번 회원이 작성한 것으로 처리됨
- 이후 migrate 진행하고 테이블 스키마 변경 및 확인
2. CREATE
- 인증된 회원의 댓글 작성 구현하기
- 작성하기 전 로그인을 먼저 진행한 상태로 진행
CommentForm
- 이전에서도 보았듯이 CommentForm 출력을 확인해보면 create 템플릿에서 불필요한 필드(user)가 출력됨
- user 필드에 작성해야 하는 user 객체는 view 함수의 request 객체를 활용해야 함
외래 키 데이터 누락
- 댓글 작성 시 NOT NULL constraint failed: articles_comment.user_id 에러 발생
- "NOT NULL 제약 조건이 실패했다. articles_comment 테이블의 user_id 컬럼에서"
- 댓글 작성 시 외래 키에 저장되어야 할 작성자 정보가 누락되었기 때문
- 댓글 작성 시 작성자 정보가 함께 저장될 수 있도록 save의 commit 옵션을 활용
3. READ
댓글 작성자 출력
- detail 템플릿에서 각 게시글의 작성자 출력
4. DELETE
댓글 삭제 시 작성자 확인
- 이제 댓글에는 작성자 정보가 함께 들어있기 때문에 현재 삭제를 요청하려는 사람과 댓글을 작성한 사람을 비교하여 본인의 댓글만 삭제할 수 있도록 함
- 추가로 해당 댓글의 작성자가 아니라면, 삭제 버튼을 출력하지 않도록 함
5. 인증된 사용자에 대한 접근 제한하기
- is_authenticated와 View decorator를 활용하여 코드 정리하기
인증된 사용자인 경우만 댓글 작성 및 삭제하기
비인증 사용자는 CommentForm을 볼 수 없도록 하기
728x90
'Back-end > Django' 카테고리의 다른 글
[DB with Django] M:N (Article - User) (0) | 2022.10.13 |
---|---|
[DB with Django] M:N relationship (0) | 2022.10.13 |
[DB with Django] N:1 (Article - User) (0) | 2022.10.12 |
[DB with Django] N:1 (Comment-Article) (0) | 2022.10.12 |
[Django] Limiting access to logged-in users (0) | 2022.10.05 |