기술블로그-Django편

📌 Django에서 누락된 category 필드 일괄 업데이트하기 (default 적용)

Chansman 2025. 5. 8. 19:27

📌 Django에서 누락된 category 필드 일괄 업데이트하기 (default 적용)

Django 프로젝트에서 Blog 모델의 category 필드가 비어 있는 상태로 저장된 게시글이 있는 경우,
관리자가 이를 일괄적으로 업데이트하여 기본값을 적용할 수 있습니다.

이 글에서는 python manage.py shell_plus 환경을 사용하여,
category 값이 빈 문자열('')로 저장된 데이터를 찾아 **'free'**로 일괄 업데이트하는 과정을 정리합니다.


🧩 문제 상황 요약

  • Blog 모델의 category 필드가 CharField인데, 초기에 입력 값이 없었던 게시글들이 존재
  • 사용자 입력 폼 또는 마이그레이션 누락으로 인해 빈 문자열로 저장됨 (category='')
  • 이후 default 값을 설정했지만, 기존 데이터에는 반영되지 않음

✅ shell_plus를 통한 일괄 업데이트 과정

1. shell_plus 실행

python manage.py shell_plus

2. 업데이트 명령어 실행

Blog.objects.filter(category='').update(category='free')

🔍 동작 설명

  • filter(category=''): category 필드가 빈 문자열인 객체만 추출
  • .update(category='free'): 해당 객체들의 category 값을 'free'로 수정

✅ 이 방식은 DB에서 직접 처리되므로 매우 빠르고 효율적입니다. (ORM 단의 save() 호출 없이 바로 반영됨)


🔐 주의사항

항목 설명

성능 .update()는 DB에서 직접 처리 → 대용량 데이터 처리에 적합
후처리 save() 호출이 아니므로 post_save 시그널 등은 발생하지 않음
안정성 백업 또는 테스트 환경에서 먼저 실행 권장

✨ 보완 전략: 모델 기본값 설정

모델 수정

class Blog(models.Model):
    category = models.CharField(max_length=20, default='free')

마이그레이션 적용

python manage.py makemigrations
python manage.py migrate

➡️ 이후부터는 새로 생성되는 데이터에는 자동으로 'free'가 들어가게 됩니다.


🧠 요약

이미 저장된 빈 category 데이터를 **'free'**로 일괄 갱신하고,
이후에는 모델에 기본값을 지정하여 새 데이터에는 자동 적용되도록 설정한다.

이러한 방식은 실무에서 매우 자주 사용되며, 데이터 정합성을 유지하는 데 중요한 역할을 합니다.

shell_plus + update() 조합은 강력한 데이터 정비 도구이므로 꼭 익혀두세요! 💡