기술블로그-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() 조합은 강력한 데이터 정비 도구이므로 꼭 익혀두세요! 💡