Model 생성
polls/model.py 작성
1
2
3
4
5
6
7
8
9
10from django.db import models
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)Question : 질문내용, 발행일자 모델
Choice : 질문내용, 선택내용, 투표번호 모델
Question과 Choice는 외래키로 연결되며, Question이 삭제되면 Choice도 함께 삭제되도록 설정
CharField
: 문자열 데이터 필드DateTimeField
: 날짜 및 시간 데이터 필드IntegerField
: 정수형 숫자 데이터 필드
Model 활성화
프로젝트에 Application을 넣을 때, url 연결 외에도 Application의 모델을 프로젝트 모델 스키마에 연결해야 하는 작업 필요
mysite/settings.py에 있는
INSTALLED_APPS
리스트에 투표 Application 등록투표 Application의 클래스 이름은 polls/apps.py에서 확인가능 →
PollsConfig
Migration : 기존 프로젝트의 모델에 Application 모델을 이식시키는 과정
makemigrations :
python manage.py makemigrations polls
입력polls 폴더 안에 migrations 폴더와 0001_initial.py가 생성됨
migrate :
python manage.py migrate
입력
makemigrations와 migrate의 차이
migration은 sql로 진행됨 → 0001_initial.py와 같이 파이썬으로 표현한 다음(makemigrations), 이를 바탕으로 다시 sql로 변환하여 프로젝트에 반영함(migrate)
- makemigrations : application의 모델에 대한 변화를 기록
- migrate : makemigrations의 변화 기록을 보고 실제로 프로젝트 모델 스키마에 application의 모델에 대한 변화를 반영
이후 모델링을 수정하고 migration 작업을 실시하면 0002, 0003… 등의 파이썬 파일이 쌓이게 됨
실제 이행되는 sql 쿼리 확인 :
python manage.py sqlmigrate polls 변경기록번호
Reference
- django Documentation : https://docs.djangoproject.com/en/3.2/intro/tutorial01/
- 참고 블로그 : https://lucky516.tistory.com/54