우리는 이제 프로젝트와 앱을 생성하고 해당하는 뷰를 작성한 후 url을 해당 뷰에 연결시킬 수 있다
이제 모델링을 할 차례고
우리는 Q&A 게시판을 만들어볼 예정이다.
질문하는 글이 올라오면 그에 대한 답변을 올릴 수 있는 시스템을 구현해야 하는데
그럴려면 다음의 것들이 필요하다
질문글의 제목, 내용, 작성 일시
답변글의 답변한 질문글 제목, 내용, 작성 일시
그럼 일단 완성본을 보고 설명을 이어나가도록 하자
from django.db import models # django.db 에서 models를 불러옴
"""
class 클래스명(인수):
속성1 = 인수1.필드타입(필드옵션)
속성2 =
속성3 =
속성4 =
class 자식클래스명:
db_table='테이블 이름'
"""
class Question(models.Model): # 클래스명은 항상 단수,카멜케이스,첫 글자는 대문자
subject = models.CharField(max_length=200)
user_id = models.CharField(max_length=200)
content = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
class Meta:
db_table='questions' # 테이블 이름은 항상 복수, 스네이크케이스, 모두 소문자
class Answer(models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE)
user_id = models.CharField(max_length=200)
content = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
class Meta:
db_table='answers'
2개의 클래스를 만들었고 이름에서 알 수 있듯 각각 질문과 답변에 관한 내용이다
앞서 우리가 정리했던 요소들(질문 글의 제목, 작성자, 내용, 작성일시)을 class의 속성(Attribute)으로 가지고 있다
question = models.ForeignKey(Question, on_delete=models.CASCADE)
"""
ForeignKey를 이용하여 Question 모델을 Answer 모델의 속성으로 가져왔다
on_delete 속성은 현재 필드의 값으로 가져온 모델이 삭제될 경우의 행동을 물어보는 필드 옵션으로
on_delete=models.CASCADE의 의미는
현재 필드에 ForignKey로 연결된 필드의 값(Question의 PK)이 삭제될 경우 현재 필드도 삭제하라는 의미로
현재 이 모델링의 특성상 질문이 삭제되면 답변도 함께 삭제된다
"""
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
"""
각각 생성일자와 수정일자를 DATABASE에 기록하기 위해 만들었고
auto_now_add=True 는 테이블에 값이 새로 작성됐을 때의 날짜,시간만 기록하고
auto_now=True 는 값이 수정됐을 때의 날짜, 시간만을 기록한다
"""
연습을 위해서 만드는 것이기 때문에 처음에는 CharField를 사용하는 클래스로 1개만 만들어서 해본 뒤에
필드를 추가하거나 다른 클래스를 추가로 정의하는 방식을 추천한다
자 이제 모델링을 끝냈으면 migrate 명령을 통해 테이블을 생성해보자
본인은 mysql 을 기준으로 설명하겠다
우선 settings.py 안에 installed_apps 부분에 우리가 startapp 으로 만든 앱의 이름을 추가해준다
터미널에 다음과 같이 입력하자
python manage.py makemigrations 앱 이름
주의할 점: 이 명령어를 실행시키는 곳은 반드시 manage.py가 있는 디렉토리여야 한다
그럼 다음과 같은 결과가 나온다
우리가 추가한 Question 과 Answer 의 모델링이 잘 생성된 것을 알 수 있다
그리고 파일 디렉토리를 잘 살펴보면 결과의 붉은 글씨에서 언급된 파일이 하나 생성된 것을 확인할 수 있다
아직 테이블이 생성된 것은 아니다
위 사진에 표시된 파일은 장고가 테이블 작업을 수행하기 위한 작업 파일이기 때문이다
그리고 다음의 명령어를 입력해주면 결과화면과 함께 migrate가 진행되고 테이블이 생성된다
python manage.py migrate
만약 model의 속성이 변경됐을 경우에는 makemigration 과 migrate 명령을 다시 한번 수행해주어야 테이블에 반영된다
다만, model에 메서드가 추가되는 경우에는 수행할 필요가 없다
'dev > django' 카테고리의 다른 글
[django] Model - Field options (0) | 2022.03.07 |
---|---|
[django] Model - 숫자관련 Field (0) | 2022.02.24 |
[django] url 분리 (0) | 2022.02.14 |
[django] Hello world (0) | 2022.02.13 |
[django] 프로젝트 생성, 개발 서버 구동하고 접속하기 (0) | 2022.02.10 |