[Django] Django에서 fixture사용하기
Django 이전에 포스팅을 했던 fixture에 대해서 간단하게 포스팅해보도록 하겠습니다.
환경 및 선수조건
- Django(App, Model에 대한 개념)
- [Python] Python을 이용한 테스트에서 fixture에 대해
소개
Django에서 fixture를 이용해서 테스팅을 할 때 DB에 값들을 넣는 방법을 알아보겠습니다.
- Model을 만든다.
- Model을 dump 떠서 혹은 입력을 통해 json형태로 저장한다.
- 명령어를 통해서 테스팅 전에 불러온다.
Model을 만들기
기본적으로 Django에서는 [app_name]/models.py
의 파일에 작성해주시면 됩니다. 작성해주시고 아래와 같은 migrate
명령어를 주셔야 적용이됩니다.
models.py
from django.db import models
class Meeting(models.Model):
maker = models.TextField()
name = models.TextField()
place = models.TextField()
start_time = models.DateTimeField()
image_path = models.ImageField(blank=True)
distance_near_univ = models.TextField()
price_range = models.TextField()
$ python manage.py migrate
Model을 dump 떠서 혹은 입력을 통해 json형태로 저장한다.
2가지 방법(Model을 dump 혹은 직접 입력)으로 json을 만들 수 있습니다.
방법1) DB에 있는 model들을 dump 뜨기
우선 현재 db에 있는 data들을 json형식으로 dump를 뜨고 싶다면 아래의 명령어를 통해서 할 수 있다.
$ python manage.py dumpdata [app_name].[model.name] --indent [INDENT] > [fixture_name].json
실제 사용 코드는 아래와 같습니다.
$ python manage.py dumpdata moim.meeting --indent 2 > meeting-data.json
방법2) 직접 json 파일을 작성하기
위에 처럼 현재 db가 아니라 아래의 형태처럼 직접 db를 json형식으로 입력해도 됩니다. json형식에 대한 부분은 구글에 자료가 많으니 따로 작성하지 않겠습니다.
[
{
"model": "moim.meeting",
"pk": 1,
"fields": {
"maker": "test maker",
"name": "test name",
"place": "test place",
"start_time": "2017-02-19T08:09:29Z",
"image_path": "",
"distance_near_univ": "test univ",
"price_range": "233000~335000"
}
}
]
만든 json파일을 [app_name]/fixtures 폴더로 이동
결론적으로 위의 형태를 만족하는 json형태의 파일을 생성하고 [app_name]폴더 아래 fixtures라고 폴더를 만들어주시고 넣어주시면 됩니다.
명령어를 통해 테스팅 전에 불러오기
이제 테스팅을 위해서 json파일들을 db에 넣어보겠습니다. 아래의 명령어를 통해서 실행합니다.
$ python manage.py migrate
$ python manage.py loaddata [app_name]/fixtures/[fixture_name].json
$ python manage.py runserver
제가 실제 사용한 명령어는 아래와 같습니다.
$ python manage.py migrate
$ python manage.py loaddata moim/fixtures/meeting-data.json
$ python manage.py runserver
Django admin을 통해서 자료가 들어가 있음을 확인 할 수 있습니다.