모델은 부가적인 메타 데이터를 가진 데이터베이스의 레이아웃(구조)이다.
데이터의 필수적인 필드들과 동작들을 포함하고 있으며, 데이터 모델을 한 곳에서 정의하고 이것으로 편리한 관리를 할 수 있도록 세팅할 수 있다.
Django는 migration 모두 모델 파일로부터 유도되며, 이 migration들은 Django가 데이터 스키마의 업데이트를 통해 현재의 모델과 이어질 수 있게 해주는 이력이다.
예를 들어 설문조사(poll) 앱을 위한 세팅을 진행해보겠다.
1. polls_203/models.py 수정
이를 위해 Question과 Choice 라는 두개의 모델을 만들 것이며
Qustion은 질문(question)과 발행일(publication)을 위한 두 필드를 가지도록,
Choice는 선택지(choice)와 표(vote) 계산을 위한 두 필드를 가지도록 설정하겠다.
vim polls_203/models.py
from django.db import models
# Create your models here.
class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
class Choice(models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE)
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)
2. saja_site/settings.py 수정
vim saja_site/settings.py
=====================================
# Application definition
INSTALLED_APPS = [
'polls_203.apps.Polls203Config', # 이 부분의 Polls203Config는 polls_203 이기 때문에 이와 같이 설정, polls 라면 PollsConfig 로 해야함)
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
=====================================
3. model에 대한 변경사항을 migration으로 저장하고 싶다고 Django에게 알리기
python manage.py makemigrations polls_203
python 심볼릭 링크 설정이 되어있지 않다면 위 명령어가 아니라 아래 명령어를 사용해야한다.
python3 manage.py makemigrations polls_203
만약 심볼릭 링크 설정을 진행하여 작성자의 테스트 환경과 동일하게 만들기 원하신다면 아래 페이지를 참조하여 작업해주면 된다.
https://growingsaja.tistory.com/171
필자는 심볼릭 링크 세팅이 되어있음을 가정하고 진행을 하도록 하겠다.
Migrations for 'polls_203':
polls_203/migrations/0001_initial.py:
- Create model Choice
- Create model Question
- Add field question to choice
와 같이 출력된다면 정상 처리된 것으로 보면 된다.
4. sql migration 작업 진행
아래는 3번 항목 작업으로 생성된 polls_203/migrations/0001_initial.py 파일을 참조하여 작업한다는 명령어이다.
python manage.py sqlmigrate polls_203 0001
5. migrate 진행
migrate를 통해 데이터베이스에 모델과 관련된 테이블을 생성해보자.
python manage.py migrate
- 모델 파일을 수정하였고
- 수정된 모델 내용으로 변경사항에 대한 마이그레이션을 생성하였고 - makemigration
- 변경사항을 데이터베이스에 적용시켜보았다. - migrate
'Development > Django with Python' 카테고리의 다른 글
[Ubuntu18.04][Django2.2] 실습 05 : 본격적인 뷰 작성 - 1 (0) | 2019.07.26 |
---|---|
[Ubuntu18.04][Django2.2] 실습 03 : 데이터베이스 연동 - mysql (0) | 2019.07.23 |
[Ubuntu18.04][Django2.2] 실습 02 : 앱 생성, 페이지 출력 정상화 (31) | 2019.07.23 |
[Ubuntu18.04][Django2.2] 실습 01 : 프로젝트 생성, 정상 접속 확인 (31) | 2019.07.23 |
[Ubuntu18.04][Django2.2] How to install Django (0) | 2019.07.23 |