- Article(N) : User(1)
- Article 모델과 User 모델 간 관계 설정
- N개 이상의 게시글은 1개의 회원에 의해 작성될 수 있음
Referencing the User model
1. setting.AUTH_USER_MODEL
- 반환 값 : 'accounts.User'(문자열)
- User 모델에 대한 외래 키 또는 M:N관계를 정의할 때 사용
- models.py의 모델 필드에서 User 모델을 참조할 때 사용
2. get_user_model()
- 반환 값 : User Object (객체)
- 현재 활성화된 User모델을 반환
- 커스터마이징한 User모델이 있을 경우는 CustomUser모델, 그렇지 않으면 User를 반환
- models.py가 아닌 다른 모든 곳에서 유저모델을 참조할 때 사용
Article - User CRUD
[모델 관계 설정]
월요일 교재 82p 사진 첨부
파일 경로 ==> articles/models.py

$ python manage.py makemigrations
기존에 존재하던 테이블에 새로운 컬럼이 추가되어야하는 상황이기때문에 migration 파일이 곧바로 만들어지지않고 일련의 과정이 필요
월요일 교재 85,86p 사진 첨부
$ python manage.py migrate
CREATE
- 인증된 회원의 게시글 작성 구현하기
- 작성하기 전 로그인을 먼저 한 상태로 진행
파일 경로 ==> articles/forms.py

- ArticleForm 출력시 불필요한 user필드도 함께 출력됨
- line6 : exclude = ('user',) 로도 대체 가능
파일 경로 ==> articles/views.py

- 이전 상태의 create함수를 이용해 게시글을 작성하면 외래 키에 저장되어야할 작성자 정보가 누락되기 때문에 create 함수 수정 필요
READ
- index.html & detail.html에서 각 게시글의 작성자 출력
파일 경로 ==> articles/index.html

파일 경로 ==> articles/detail.html

UPDATE
- 수정을 요청하는 사람과 게시글을 작성한 사람을 비교하여 본인의 게시글만 수정할 수 있도록 함
파일 경로 ==> articles/views.py

파일 경로 ==> articles/detail.html

- 해당 게시글의 작성자가 아니라면 수정/삭제 버튼 자체를 출력해주지 않음
DELETE

[모델 관계 설정]
화요일 교재 6p 사진 첨부
파일 경로 ==> articles/models.py

- Comment 모델에 User모델을 참조하는 외래키 작성
$ python manage.py makemigrations
-위의 Article_User와 같은 과정 필요
$ python manage.py migrate
CREATE
- 인증된 회원의 댓글 작성 구현
- 작성하기 전 로그인 미리 한 상태에서 진행
파일 경로 ==> articles/forms.py

- CommentForm 출력 시 불필요한 피드 user가 출력됨
- exclude 사용해 제외
파일 경로 ==> articles/views.py

- 댓글 작성 시 외래 키에 저장되어야 할 작성자 정보가 누락 ==> 막아주기 위해 comments_create 함수 수정, comment.user에 현재 요청한 request.user를 넣어줌
READ
파일 경로 ==> articles/detail.html

DELETE
파일 경로 ==> articles/views.py

- 삭제 요청한 사람과 댓글 작성자가 같을때만 삭제가 가능하도록 함

- 추가로 해당 댓글의 작성자가 아니라면, 삭제 버튼 자체를 출력하지 않음
인증된 사용자에 대한 접근 제한
- is_authenticated와 View decorator 활용
파일 경로 ==> articles/views.py

- from django.views.decorators.http import require_POST : 최상단 import

파일 경로 ==> articles/detail.html

- 로그인되지않은 사용자에게는 CommentForm 자체를 보여주지 않음