※ Do it! 장고 + 부트스트랩 파이썬 웹 개발의 정석(이성용, 김태곤 / 이지스퍼블리싱) 책을 참고하여 프로젝트를 진행하고 있습니다.
프로젝트 진행과정 기록하기 위해 작성하고 있으므로 책 저작권으로 인해 간단한 내용 외 자세한 코드와 내용은 작성하지 않습니다.
- 작성자 정보 담을 author 필드 구현
blog/models.py
from django.db import models
from django.contrib.auth.models import User # 추가 내용 1
import os
class Post(models.Model):
# ... 생략
# on_delete=models.CASCADE => 이 포스트의 작성자가 디비에서 삭제되었을 때 이 포스트도 같이 삭제됨
# on_delete=models.SET_NULL => 이 포스트의 작성자가 디비에서 삭제되면 작성자명을 빈 칸으로 둔다. null=True 해야함
author = models.ForeignKey(User, null=True, on_delete=models.SET_NULL) # 추가 내용 2
def __str__(self): # post name setting
return f'[{self.pk}]{self.title} :: {self.author}' # 추가 내용 3
# ... 생략
1. from django.contrib.auth.models import User : 장고에서 기본적으로 제공하는 모델
2. author = models.ForeignKey(User, null=True, on_delete=models.SET_NULL) : User을 이용하여 author 필드를 만든다.
on_delete=models.CASCADE => 이 포스트의 작성자가 디비에서 삭제되었을 때 이 포스트도 같이 삭제된다.
on_delete=models.SET_NULL => 이 포스트의 작성자가 디비에서 삭제되면 작성자명을 빈 칸으로 둔다. null=True 해야함
3. return f'[{self.pk}]{self.title} :: {self.author}' : 포스트 목록에서 작성자 정보까지 출력
위와 같이 설정하고 나면 관리자 페이지 포스트 작성에 Author 입력란이 생긴 모습을 볼 수 있다.
- 작성자 정보가 삭제될 때 2가지 경우 (author = models.ForeignKey(User, __________))
User을 이용하여 author 필드를 만들 때 빈칸에 어떠한 값을 넣느냐에 따라 결과가 달라진다.
1) on_delete=models.CASCADE
이 포스트의 작성자가 디비에서 삭제되었을 때 이 포스트도 같이 삭제된다.
james user가 작성한 게시글이 2개가 있다. 아래와 같이 james user를 삭제하게 되면 james user가 작성한 2개의 게시글이 모두 삭제됨을 볼 수 있다.
2) on_delete=models.SET_NULL
이 포스트의 작성자가 디비에서 삭제되면 작성자명을 빈 칸으로 둔다. null=True도 추가 해야함
null = True를 추가 하지 않으면 on_delete=SET_NULL로 설정한 곳은 null일 수 없으므로 null = True를 추가하라는 error 메시지가 발생한다.
tom user가 작성한 게시글이 2개가 있다. 아래와 같이 tom user를 삭제하게 되면 tom user가 작성한 2개의 게시글이 모두 작성자가 None으로 바뀐 모습을 볼 수 있다.
- 포스트 목록 페이지에 작성자 추가
blog/templates/blog/post_list.html
위와 같이 수정해주면 목록 페이지에 작성자가 추가 된 모습을 확인 할 수 있다.
- 포스트 상세 페이지에 작성자 추가
blog/templates/blog/post_detail.html
위와 같이 수정해주면 상세 페이지에 작성자가 추가 된 모습을 확인 할 수 있다.
'Web > Django, Bootstrap' 카테고리의 다른 글
[Blog 만들기] #7 테스트 주도 개발(TDD; Test driven development) (0) | 2022.06.19 |
---|---|
[Blog 만들기] #6 IF문 사용하여 블로그 목록 페이지 오류 해결 (0) | 2022.04.10 |
[Blog 만들기] #5 블로그 포스트 미디어 파일 넣기 (0) | 2022.04.08 |
[Blog 만들기] #4 FBV 방식, CBV 방식 (0) | 2022.04.05 |
[Blog 만들기] #3 장고 구조, 블로그 페이지 구성 (0) | 2022.04.04 |
댓글