🧩 Chapter 04. [블로그] 상세페이지에 작성자 정보 추가하기
1️⃣ Blog 모델에 작성자(author) 컬럼 추가
📌 Django에서 제공하는 인증 유저 모델을 불러와 author 필드에 연결합니다.
# blog/models.py
from django.contrib.auth import get_user_model # ✅ 유저 모델 불러오기
from django.db import models
User = get_user_model() # 현재 프로젝트에서 사용하는 User 모델 반환
class Blog(models.Model):
CATEGORY_CHOICES = (
('free', '자유'),
('travle', '여행'),
('cat', '고양이'),
('dog', '강아지')
)
category = models.CharField('카테고리', max_length=10, choices=CATEGORY_CHOICES)
title = models.CharField('제목', max_length=100)
content = models.TextField('본문')
# ✅ 작성자 필드 추가
author = models.ForeignKey(User, on_delete=models.CASCADE)
created_at = models.DateTimeField('작성일자', auto_now_add=True)
updated_at = models.DateTimeField('수정일자', auto_now=True)
def __str__(self):
return f'[{self.get_category_display()}] {self.title[:10]}'
class Meta:
verbose_name = '블로그'
verbose_name_plural = '블로그 목록'
🔎 on_delete 옵션 설명
- CASCADE: 유저 삭제 시 관련 블로그도 함께 삭제
- PROTECT: 유저 삭제 불가 (외래키 참조 중이면 에러 발생)
- SET_NULL: 유저 삭제 시 author를 NULL로 설정 (필드에 null=True 필요)
2️⃣ 마이그레이션 시 기존 데이터 처리 방법
author는 null이 허용되지 않기 때문에 기존 블로그 데이터에 author 값을 설정해야 함
💡 해결 방법 2가지:
- 1회성 디폴트 값 입력 (예: 슈퍼유저 ID = 1)
- 마이그레이션 후 수동으로 DB 편집
📌 강의에서는 1번 방식 사용 → 마이그레이션 시 1을 입력
3️⃣ 상세페이지 템플릿에 작성자 정보 출력
<!-- templates/blog_detail.html -->
<h1>{{ blog.title }}</h1>
<div style="text-align: right">
{{ blog.author.username }} <!-- 작성자명 출력 -->
</div>
<hr>
<p>{{ blog.content }}</p>
<a href="{% url 'blog_list' %}">목록으로 돌아가기</a>
4️⃣ 블로그 목록 페이지에도 작성자 표시
<!-- templates/blog_list.html -->
<h1>블로그 목록</h1>
{% for blog in blogs %}
<p>
<a href="{% url 'blog_detail' blog.pk %}">
{{ blog.title }} <span>({{ blog.author.username }})</span> -
<small>{{ blog.created_at|date:"Y-m-d" }}</small>
</a>
</p>
{% endfor %}
📌 blog.author.username을 통해 ForeignKey 필드의 유저 이름 출력
✅ 마무리 체크리스트
항목 설명
작성자 필드 추가 | ✅ author = models.ForeignKey(User, ...) |
기존 데이터 처리 | ✅ 마이그레이션 시 디폴트 유저 ID 입력 |
상세페이지 수정 | ✅ 작성자명 출력 코드 추가 |
목록페이지 수정 | ✅ 블로그마다 작성자 표시 |
💬 작성자 정보가 표시됨으로써, 누가 작성한 글인지 명확히 알 수 있어 블로그 서비스의 신뢰도와 구조적 완성도를 높일 수 있습니다.
'Django' 카테고리의 다른 글
Chapter 4-4 Django 블로그 수정 기능 구현 (작성자만 수정 가능) (0) | 2025.05.07 |
---|---|
Chapter 4-3 Django 작성 기능 만들기 with Form (0) | 2025.05.07 |
Chapter 3-7 Django 회원가입(SignUp) 및 로그인(Login) 페이지 만들기 (0) | 2025.05.06 |
Chapter 3-6 Django 회원가입(SignUp) 페이지 만들기 (0) | 2025.05.06 |
Chapter 3-5 Django 로그아웃 기능 만들기 (0) | 2025.05.06 |