장고 모델 이름 변경하기

소요 시간: 3분

오늘은 Django 프로젝트에서 모델 이름을 변경하는 작업을 했다. 처음에는 간단하게 생각했지만, 데이터베이스와의 관계를 고려해야 해서 조금 복잡했다. 그래서 이 과정을 기록해 두기로 했고, 나중에 다시 참고할 수 있을 것 같다.


1. 모델 이름 변경하기

우선, 기존 모델 이름을 변경하는 것으로 시작했다. 예를 들어, OldModelName이라는 모델이 있었는데, 이 이름을 NewModelName으로 바꿔야 했다. 코드는 이렇게 바뀌었다:

class OldModelName(models.Model):
    name = models.CharField(max_length=100)

# 변경 후
class NewModelName(models.Model):
    name = models.CharField(max_length=100)


마이그레이션 파일 생성하기

모델 이름을 바꾸고 나서 makemigrations 명령어를 실행했다. 이렇게 하면 Django가 변경 사항을 감지하고 마이그레이션 파일을 생성해 준다.

python manage.py makemigrations

그런데 여기서 문제가 생길 수 있다. Django가 모델 이름 변경을 자동으로 인식하지 못할 수 있기 때문에, 생성된 마이그레이션 파일을 직접 수정해야 했다. 열어보니 마이그레이션 파일에서 다음과 같이 모델 이름을 변경하는 코드를 추가해야 했다.

from django.db import migrations

class Migration(migrations.Migration):

    dependencies = [
        # 여기에 종속성 마이그레이션 추가
    ]

    operations = [
        migrations.RenameModel(
            old_name='OldModelName',
            new_name='NewModelName',
        ),
    ]


마이그레이션 적용하기

마이그레이션 파일을 수정한 후, 이제 변경 사항을 데이터베이스에 적용할 차례였다. migrate 명령어를 사용했다.

python manage.py migrate

이렇게 해서 모델 이름 변경은 완료되었다!


4. 데이터베이스 테이블 이름 변경 (선택 사항)

Django에서는 모델 이름을 바꿔도 기본적으로 테이블 이름은 변경되지 않았다. 그래서 테이블 이름도 바꾸고 싶으면 추가적인 작업이 필요했다. 모델의 Meta 클래스에서 db_table 속성을 설정해 주었다.

class NewModelName(models.Model):
    name = models.CharField(max_length=100)

    class Meta:
        db_table = 'new_model_table_name'

그런 다음, 또 마이그레이션 파일을 수정해서 테이블 이름 변경도 추가했다. 이렇게이다:

from django.db import migrations

class Migration(migrations.Migration):

    dependencies = [
        # 여기에 종속성 마이그레이션 추가
    ]

    operations = [
        migrations.RenameModel(
            old_name='OldModelName',
            new_name='NewModelName',
        ),
        migrations.AlterModelTable(
            name='NewModelName',
            table='new_model_table_name',
        ),
    ]

이렇게 해서 Django에서 모델 이름을 안전하게 변경하는 작업이 끝났다! 처음에는 복잡하게 느껴졌지만, 하나하나 과정을 밟아가니까 점점 이해가 갔다. 나중에 이 과정을 다시 참고할 수 있도록 일기에 기록해 두는 것이 정말 좋을 것 같다.

이제 프로젝트가 좀 더 깔끔해졌으니, 다음 단계로 넘어가야겠다!

장고 리스트