Django
Chapter 9-5 Django 댓글 모델 만들기, 태그 모델 만들기
Chansman
2025. 5. 14. 15:16
🏷️ Tag & Comment 모델 구현 + 마이그레이션 제어
1️⃣ 모델 기능 설명
이번 구현에서는 포스트에 태그를 다는 기능과, 댓글을 작성하는 기능을 추가합니다.
2️⃣ 모델 코드 (models.py)
# post/models.py
# 태그 N:N
class Tag(TimestampModel):
tag = models.CharField('태그', max_length=100)
posts = models.ManyToManyField(Post, related_name='tags')
def __str__(self):
return self.tag
# 댓글
class Comment(TimestampModel):
post = models.ForeignKey(Post, related_name='comments', on_delete=models.CASCADE)
content = models.CharField('내용', max_length=255)
user = models.ForeignKey(User, on_delete=models.CASCADE)
def __str__(self):
return f'{self.post} | {self.user}'
✔️ Tag 모델
- CharField: 실제 태그 문자열
- ManyToManyField: 한 태그는 여러 포스트에 연결될 수 있음
- related_name='tags': Post 인스턴스에서 .tags.all()로 접근 가능
✔️ Comment 모델
- ForeignKey(Post): 어떤 포스트에 달린 댓글인지
- CharField: 댓글 본문
- ForeignKey(User): 댓글 작성자
- related_name='comments': post.comments.all()로 접근
3️⃣ 마이그레이션 제어 방법
특정 상황에서 마이그레이션을 세밀하게 제어하고 싶을 때 유용한 명령어 모음
🔍 현재 상태 확인
python manage.py showmigrations
→ 앱별로 어떤 마이그레이션이 적용되었는지 확인
🧱 특정 마이그레이션 파일까지만 적용
python manage.py migrate post 0001
→ post 앱의 0001까지만 적용하고 멈춤
🧹 이후 불필요한 마이그레이션 파일 제거
# 0002~000n 파일 직접 삭제
🆕 다시 최신 마이그레이션 파일 생성
python manage.py makemigrations
✅ 재마이그레이션
python manage.py migrate
🔄 마이그레이션 초기화 (0번으로 되돌리기)
python manage.py migrate post zero
→ 모든 테이블을 지우고, 처음 상태로 되돌림
✅ 요약
항목 설명
모델 1 | Tag - N:N 관계, Post와 연결 |
모델 2 | Comment - FK(Post), FK(User), 댓글 기능 |
마이그레이션 관리 | showmigrations / migrate 앱명 버전 / zero 처리 가능 |
👉 이 구조를 기반으로 다음엔 댓글 폼 처리 및 태그 검색 기능도 확장할 수 있습니다!