WEB/django

[django] Django custom migration 하기

happykoa 2021. 7. 3. 19:06

기존까지는 django를 사용하여 프로젝트를 진행할 때, models.py 파일을 수정하고, python mange.py makemigrations 를 통해 자동으로 생성된 파일만으로 디비 마이그레이션을 진행했었다.

 

레일즈로는 직접 마이그레이션 파일을 작성하고, 여러 잡들도 만들었었는데, 유독 장고로는 이런 일을 할일이 없었던 것 같다가 

해당 작업을 하게 되어 글을 작성해본다.

 

정말 심플하다.

 

1. 아래 명령어로 마이그레이션 파일을 만들고싶은 앱 이름을 넣고 빈 마이그레이션 파일을 만들어준다.

python manage.py makemigrations --empty [마이그레이션 파일을 만들고 싶은 app 이름]

 

여러분의 코드에서의 dependencies는 아래 코드 상에서의 dependency와 당연히 다를 것이다. ㅎㅎ

# Generated by Django 3.1.9 on 2021-07-03 08:56

from django.db import migrations


class Migration(migrations.Migration):

    dependencies = [
        ('boards', '0011_auto_20210703_1752'),
    ]

    operations = [
    ]

 

2. 만들어진 마이그레이션 파일 상에서 원하는 마이그레이션 동작을 추가한다.

아래 코드는 boards 앱에 있는 Board 모델 레코드의 type이 없는 경우 type을 모두 'board'라는 문자열로 치환하는 마이그레이션 작업 코드이다.

# Generated by Django 3.1.9 on 2021-07-03 08:56

from django.db import migrations


class Migration(migrations.Migration):

    def set_default_board_type(apps, schema_editor):
        Board = apps.get_model("boards", "Board")
        for board in Board.objects.all():
            if not board.type:
                board.type = 'board'
                board.save()

    dependencies = [
        ('boards', '0011_auto_20210703_1752'),
    ]

    operations = [
        migrations.RunPython(set_default_board_type),
    ]

 

이제 열심히 디비 마이그레이션을 하자.

 

'WEB > django' 카테고리의 다른 글

[Django] Single Table Inheritance  (0) 2021.07.03
singun11's Django Tutorial 목차  (0) 2020.10.26