반응형
질문과 답변을 생성하여 사용하고자 한다. 생성하고자 하는 모델은 어떠한 속성을 지니고, 어떻게 생성해야 하는지 글로 쓰고자 한다.
1. 모델의 속성
[Question 모델]
subject | 질문의 제목 |
content | 질문의 내용 |
create_date | 질문을 작성한 일시 |
[Answer 모델]
question | 질문 (어떤 질문의 답변인지 알아야하므로 질문 속성이 필요하다) |
content | 답변의 내용 |
create_date | 답변을 작성한 일시 |
2. models.py 작성하기
이렇게 생각한 속성을 바탕으로 질문(Question)과 답변(Answer)에 해당되는 모델을 pybo/models.py 파일에 정의한다.
// mysite/projects/pybo/models.py
from django.dbimport models
classQuestion(models.Model):
subject = models.CharField(max_length=200)
content = models.TextField()
create_date = models.DateTimeField()
classAnswer(models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE)
content = models.TextField()
create_date = models.DateTimeField()
- Question : 제목, 내용, 작성 일시를 속성으로 갖도록 작성했다.
- 제목 : 최대 200자까지 가능하도록 max_length=200을 설정하였다. 제목처럼 글자 수의 길이가 제한된 텍스트는 CharField를 사용한다.
- 내용 : 글자 수를 제한할 수 없는 텍스트는 위처럼 TextField를 사용한다.
- 작성 일시 : 날짜와 시간에 관계된 속성은 DateTimeField를 사용한다.
- Answer : 질문에 대한 답변에 해당되므로 Question 모델을 속성으로 가져가야 한다. 기존 모델을 속성으로 연결하려면 ForeignKey를 사용해야 한다.
- ForeignKey : 다른 모델과 연결하기 위해 사용한다.
- on_delete=models.CASCADE : 이 답변과 연결된 질문(Question)이 삭제될 경우 답변(Answer)도 함께 삭제된다는 의미이다. 질문 하나에는 무수히 많은 답변이 등록될 수 있다. CASCADE 옵션은 질문을 삭제하면 그에 달린 답변들도 모두 함께 삭제한다.
3. 테이블 생성하기
1) INSTALLED_APPS 항목 추가하기
INSTALLED_APPS = [
'pybo.apps.PyboConfig',
]
테이블 생성을 위해 pybo 앱을 config/settings.py 파일의 INSTALLED_APPS 항목에 추가해야 한다.
- pybo.apps.PyboConfig : pybo/apps.py 파일에 있는 클래스이다. 이 파일은 pybo 앱 생성시 자동으로 만들어지는 파일로 따로 만들 필요가 없다.
2) makemigrations
python manage.py makemigrations
makemigrations 명령은 모델을 생성하거나 모델에 변화가 있을 경우에 실행해야 하는 명령이다. 위 명령을 수행하면 pybo\\migrations\\0001_initial.py 라는 파이썬 파일이 자동으로 생성된다.
반응형
3) sqlmigrate
makemigrations로 데이터베이스 작업 파일을 생성하고 migrate 명령을 실행하기 전에 실제 어떤 쿼리문이 실행되는지 sqlmigrate 명령으로 확인해 볼 수 있다.
python manage.py sqlmigrate pybo 0001
- “pybo"는 앱 이름을 의미하고 "0001"은 생성된 작업파일(예: 0001_initial.py)의 일련번호를 의미한다.
4) migrate
python manage.py migrate
migrate 명령을 수행하여 실제 테이블을 생성한다.
👇🏻 참고 사이트
반응형