https://velog.io/@swhybein/django-%ED%8A%9C%ED%86%A0%EB%A6%AC%EC%96%BC-part1
part1에 이어서 part2를 진행해 보겠습니다.
https://docs.djangoproject.com/ko/3.0/intro/tutorial02/
django는 데이터베이스로 sqlite3를 기본 제공해 따로 설치할 필요가 없습니다. 프로젝트 폴더 안에 db.sqlite3
파일로 저장됩니다.
mysite/settings.py
파일에 INSTALLED_APPS
를 보면 기본 app이 나열되어 있는데 이 app들도 데이터베이스 테이블을 사용합니다. 아래 명령어를 사용하면 INSTALLED_APPS
에 있는 앱에 대한 데이터베이스가 생성됩니다. 이 과정이 꼭 필요한 것은 아닙니다.
`$ python manage.py migrate`
모델이란 부가적인 메타데이터를 가진 데이터베이스의 구조(layout)를 말합니다. polls
앱에 두 개의 모델 Question
그리고 Choice
를 만들 건데 각각이 표 하나라고 생각하면 됩니다.
Question
의 필드(또는 칼럼) 1.질문 2.질문 시각Choice
의 필드(또는 칼럼) 1.질문 2.답변(선택지) 3.답변 횟수from 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
각 모델은 class로 정의하며 django.db.models.Model.를 상속 받게 됩니다.Charfield
는 한 줄 정도의 문자를, DateTimeField
는 날짜와 시간을, IntergerField
는 숫자(정수) 형식을 뜻합니다. max_length
는 최대 글자수, default=0
은 초기값입니다.ForeignKey
는 Choice
와 Question
을 연결해 주는 것으로 다대일(many-to-one) 관계로 설정됐으며 on_delete=models.CASCADE
는 원래 데이터인 Question
이 삭제될 경우 이 필드가 삭제된다는 의미입니다.ForeignKey
로 연결할 때 일대다(one-to-many) 또는 다대다(many-to-many) 관계로도 설정이 가능합니다.모델을 만들고 꼭 해야하는 것이 프로젝트 settings.py
파일에 추가하는 것입니다.
INSTALLED_APPS = [
'polls.apps.PollsConfig', # 추가
'django.contrib.admin', # 아래는 기본앱들
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
모델을 추가 또는 변경했을 경우 makemigration
명령어를 통해 변경사항을 migration
으로 저장합니다. 각 앱마다 migrations
폴더가 따로 있고 0001_initial.py
파일이 생긴 것을 볼 수 있습니다.
`$ python manage.py makemigrations polls`
Migrations for 'polls':
polls/migrations/0001_initial.py:
- Create model Choice
- Create model Question
- Add field question to choice
저장한 모델의 데이터베이스를 생성(업데이트)합니다.
`$ python manage.py migrate`
Operations to perform:
Apply all migrations: admin, auth, contenttypes, polls, sessions
Running migrations:
Rendering model states... DONE
Applying polls.0001_initial... OK