[Django] RunPython in Django
Django에서 테스트를 하기위해 RunPython을 이용해서 Database에 값을 넣어보자
소개
Django에서 fixture사용하기에서 fixture를 이용해 django에서 DB에 자료를 추가하는 방법을 보았는데 이번에는 RunPython을 이용해 보겠습니다.
방법
방법은 비교적 간단하며 아래와 같습니다.
- [app_name]/models.py에 모델을 정의합니다.
- [app_name]/migrations/에 해당 모델에 대한 py를 추가합니다(하단 참조)
./manage.py makemigrations
및./manage.py migrate
실행
모델 작성
필요한 모델을 작성합니다. 예시를 위해서 RunPythonExample이라는 모델을 만들었습니다.
[app_name]/.models.py
from django.db import models
[...]
class RunPythonExample(models.Model):
test_name = models.TextField()
test_text = models.TextField()
모델에 대한 .py를 migrations 폴더에 추가
모델을 추가하였으니 해달 모델에 대한 값들을 추가하는 코드를 아래처럼 작성해서 migrations의 하위에 추가합니다. 2개의 tuple을 추가해보겠습니다.
run_python_test.py
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations
def forwards_func(apps, schema_editor):
# (app_name, 해당 앱에서 model class명)
RunPythonExample = apps.get_model("moim", "RunPythonExample")
db_alias = schema_editor.connection.alias
RunPythonExample.objects.using(db_alias).bulk_create([
RunPythonExample(test_name = "test_name_one", test_text = "test_text_one"),
RunPythonExample(test_name = "test_name_two", test_text = "test_text_two"),
])
def reverse_func(apps, schema_editor):
RunPythonExample = apps.get_model("moim", "RunPythonExample")
db_alias = schema_editor.connection.alias
RunPythonExample.objects.using(db_alias).filter(test_name="test_name_one").delete()
RunPythonExample.objects.using(db_alias).filter(test_name="test_name_two").delete()
class Migration(migrations.Migration):
dependencies = [
]
operations = [
migrations.RunPython(forwards_func, reverse_func),
]
명령어 실행 및 확인
명령어를 실행해서 이제 확인을 해봅시다.
python ./manage.py makemigrations
python ./manage.py migrate
python ./manage.py runserver