장고 필드 최대 글자수 변경하기

소요 시간: 3분

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를 변경하려면, 기존 데이터를 처리하고, 모델을 수정한 뒤, 마이그레이션을 적용하는 순서로 진행해야 한다.

이 과정을 통해 안전하게 데이터베이스 구조를 변경하고, 새로운 조건을 적용할 수 있다.

장고 리스트