Many to one relationships 2

뚝딱뚝딱·2023년 10월 11일
0

DB

목록 보기
3/5
post-thumbnail
post-custom-banner

Article(N)-User(1)

0개 이상의 게시글은 1명의 회원에 의해 작성될 수 있다.

Comment(N)-User(1)

0개 이상의 댓글은 1명의 회원에 의해 작성 될 수 있다.

Article & User

모델 관계 설정

User 외래 키 정의

User 모델을 참조하는 2가지 방법

  • django 프로젝트의 '내부적인 구동 순서'와 '반환 값'에 따른 이유

  • 우리가 기억할 것은 User 모델은 직접 참조하지 않는다는 것 ⭐

  • 현재 활성화된 user객체

1. get_user_model()

함수다. 반환값이 객체다. / user객체가 구동할때 없을 수도 있어서 문자열로 참조하도록 models.py에서는 settings.AUTH_USER_MODEL 사용한다.

2. settings.AUTH_USER_MODEL

반환값이 문자열이다.


Migration

- 기본적으로 모든 컬럼은 NOT NULL 제약조건이 있기 때문에 데이터가 없이는 새로운 필드가 추가되지 못함 -> 기본값 설정 필요
- 1을 입력하고 Enter 진행(다음 화면에서 직접 기본 값 입력)
- 추가되는 외래 키 user_id에 어떤 데이터를 넣을 것인지 직접 입력해야 함
- 마찬가지로 1 입력하고 Enter 진행
- 그러면 기존에 작성된 게시글이 있다면 모두 1번 회원이 작성한 것으로 처리됨
- migration 파일 생성 후 migrate 진행

게시글 CREATE

- 기존 ArticleForm 출력 변화 확인
- User 모델에 대한 외래 키 데이터 입력을 위해 불필요한 input이 출력

ArticleForm 출력 필드 수정

게시글 작성 시 에러 발생
-user_id 필드 데이터가 누락되었기 때문
게시글에 작성자가 없다.(현재 로그인한 user가 게시글 저장될 때 들어가야 함)

게시글 작성 시 작성자 정보가 함께 저장될 수 있도록 save의 commit 옵션 활용

게시글 작성 후 테이블 확인

게시글 READ

각 게시글의 작성자 이름 출력

게시글 UPDATE

- 게시글 수정 요청 사용자와 게시글 작성 사용자를 비교하여 본인의 게시글만 수정 할 수 있도록 하기

- 해당 게시글의 작성자가 아니라면, 수정/삭제 버튼을 출력하지 않도록 하기

게시글 DELETE

  • 삭제를 요청하려는 사람과 게시글을 작성한 사람을 비교하여 본인의 게시글만 삭제할 수 있도록 하기

Comment & User

모델 관계 설정

Comment-User 모델 관계 설정

User 외래 키 정의

Migration

  • 이전에 Article과 User모델 관계 설정 때와 동일한 상황
  • 기존 Comment 테이블에 새로운 컬럼이 빈 값으로 추가 될 수 없기 때문에 기본 값 설정 과정이 필요

댓글 CREATE

  • 댓글 작성 시 이전에 게시글 작성 할 때와 동일한 에러 발생
  • 댓글의 user_id 필드 데이터가 누락되었기 때문
댓글 작성 시 작성자 정보가 함께 저장될 수 있도록 작성

댓글 작성 후 테이블 확인
1번 게시글에 2번 user가 댓글 작성함

댓글 READ

댓글 출력 시 댓글 작성자와 함께 출력

댓글 DELETE

- 댓글 삭제 요청 사용자와 댓글 작성 사용자를 비교하여 본인의 댓글만 삭제할 수 있도록 하기

- 해당 댓글의 작성자가 아니라면, 댓글 삭제 버튼을 출력하지 않도록 함

참고

인증된 사용자만 댓글 작성 및 삭제

@login_required
def comments_create(request, pk):
	pass
   
@login_required
def comments_delete(request, article_pk, comment_pk):
	pass
  • 로그인 안하고 댓글작성하려고 하면 로그인 화면이 뜬다.
profile
나의 행복 만들기
post-custom-banner

0개의 댓글