장고 필드 최대 글자수 변경하기
Django 모델에서 CharField의 max_length를 줄여야 할 때의 절차를 정리해보자.
예를 들어, max_length를 50에서 20으로 줄이는 경우, 기존 데이터를 어떻게 처리할지, 그리고 실제로 어떻게 적용할지를 단계별로 살펴보겠다.
1. 기존 데이터 처리
max_length 변경 시 기존 데이터가 새 제한을 만족해야 한다. 이를 위해 필드 값을 잘라주는 스크립트를 작성해 데이터를 수정할 수 있다.
MyModel의 alias 필드의 최대 길이를 50에서 20으로 줄여야 한다고 가정하자. 다음과 같이 기존 데이터를 업데이트할 수 있다.
for obj in MyModel.objects.all():
obj.alias = obj.alias[:20] # 20자까지 자르기
obj.save() # 수정된 값 저장
이 스크립트는 `MyModel` 객체를 순회하면서 `alias` 필드 값을 20자로 자르고, 수정된 값을 데이터베이스에 저장한다.
2. 모델에서 max_length 변경
데이터 수정 후, 모델에서 max_length를 새 값으로 변경해야 한다.
예를 들어, 50에서 20으로 변경하는 코드는 다음과 같다.
# 수정 전
alias = models.CharField(max_length=50)
# 수정 후
alias = models.CharField(max_length=20)
3. 마이그레이션 파일 생성 및 적용
모델을 수정한 후, Django 마이그레이션 기능을 사용하여 변경 사항을 데이터베이스에 반영해야 한다.
먼저, 마이그레이션 파일 생성한다:
python manage.py makemigrations
마이그레이션 적용시킨다:
python manage.py migrate
이 과정을 통해 `alias` 필드의 `max_length`가 50에서 20으로 변경된다.
4. 새로운 데이터 저장
이제 alias 필드에 저장되는 데이터는 max_length=20을 기준으로 제한된다. 20자를 초과하는 데이터는 자동으로 거부되고, 최대 20자까지만 저장된다.
결론
Django에서 CharField의 max_length를 변경하려면, 기존 데이터를 처리하고, 모델을 수정한 뒤, 마이그레이션을 적용하는 순서로 진행해야 한다.
이 과정을 통해 안전하게 데이터베이스 구조를 변경하고, 새로운 조건을 적용할 수 있다.