[Django] Django에서 fixture사용하기

Django 이전에 포스팅을 했던 fixture에 대해서 간단하게 포스팅해보도록 하겠습니다.


환경 및 선수조건


소개

Django에서 fixture를 이용해서 테스팅을 할 때 DB에 값들을 넣는 방법을 알아보겠습니다.

  1. Model을 만든다.
  2. Model을 dump 떠서 혹은 입력을 통해 json형태로 저장한다.
  3. 명령어를 통해서 테스팅 전에 불러온다.


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을 통해서 자료가 들어가 있음을 확인 할 수 있습니다.