본문 바로가기
Web/Django, Bootstrap

[Blog 만들기] #8 게시물 author 구현

by 파크영 2022. 6. 19.

※ 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 입력란이 생긴 모습

 

위와 같이 설정하고 나면 관리자 페이지 포스트 작성에 Author 입력란이 생긴 모습을 볼 수 있다.

 

 

 

 

  • 작성자 정보가 삭제될 때 2가지 경우 (author = models.ForeignKey(User, __________))

User을 이용하여 author 필드를 만들 때 빈칸에 어떠한 값을 넣느냐에 따라 결과가 달라진다. 

 

1) on_delete=models.CASCADE 

이 포스트의 작성자가 디비에서 삭제되었을 때 이 포스트도 같이 삭제된다. 

     

james 유저 삭제 전 게시글 목록

 

james user가 작성한 게시글이 2개가 있다. 아래와 같이 james user를 삭제하게 되면 james user가 작성한 2개의 게시글이 모두 삭제됨을 볼 수 있다. 

 

user에서 삭제 된 모습

 

james 유저 삭제 후 게시글 목록

 

 

 

 

2) on_delete=models.SET_NULL 

이 포스트의 작성자가 디비에서 삭제되면 작성자명을 빈 칸으로 둔다.  null=True도 추가 해야함

 

null = True를 추가 하지 않으면 on_delete=SET_NULL로 설정한 곳은 null일 수 없으므로 null = True를 추가하라는 error 메시지가 발생한다. 

 

 

tom유저 삭제 전 게시글 목록

 

tom user가 작성한 게시글이 2개가 있다. 아래와 같이 tom user를 삭제하게 되면 tom user가 작성한 2개의 게시글이 모두 작성자가 None으로 바뀐 모습을 볼 수 있다. 

 

tom유저 삭제 후 게시글 목록

 

 

 

 

  • 포스트 목록 페이지에 작성자 추가

blog/templates/blog/post_list.html

 

위와 같이 수정해주면 목록 페이지에 작성자가 추가 된 모습을 확인 할 수 있다. 

 

 

 

 

  • 포스트 상세 페이지에 작성자 추가

blog/templates/blog/post_detail.html

 

위와 같이 수정해주면 상세 페이지에 작성자가 추가 된 모습을 확인 할 수 있다. 

 

댓글