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 처리 가능

👉 이 구조를 기반으로 다음엔 댓글 폼 처리 및 태그 검색 기능도 확장할 수 있습니다!