장고는 모델(Model)을 통해 데이터베이스를 처리한다.
보통 DB는 SQL 쿼리를 통해 CRUD를 하는데, 장고는 모델을 통해 쿼리문 없이 데이터를 처리할 수 있다.
settings.py 파일에서 데이터베이스에 대한 정보를 확인할 수 있다.
데이터베이스 파일은 BASE_DIR 디렉터리 밑에 db.sqlite3 파일에 저장한다고 정의되어 있다. BASE_DIR은 프로젝트 디렉터리를 의미한다.
SQLite는 주로 개발용이나 소규모 프로젝트에서 사용되는 가벼운 파일 기반의 데이터베이스이다. 개발시에는 SQLite를 사용하여 빠르게 개발하고 실제 운영시스템은 좀 더 규모있는 DB를 사용하는 것이 일반적인 개발 패턴이다.
python manage.py migrate
위의 명령어를 통해 해당 앱들이 필요로 하는 데이터베이스 테이블들을 생성할 수 있다.
migrate를 수행하면 admin, auth, contenttypes, sessions 앱들이 사용하는 테이블들이 생성된다.
질문과 답변을 할 수 있는 파이썬 게시판을 만들어보자.
from django.db import models
class Question(models.Model):
subject = models.CharField(max_length=200)
content = models.TextField()
create_date = models.DateTimeField()
class Answer(models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE)
content = models.TextField()
create_date = models.DateTimeField()
Question 모델은 제목(subject), 내용(content) 그리고 작성일시(create_date)를 속성으로 갖도록 작성했다.
제목은 최대 200자까지 가능하도록 max_length=200을 설정하였다.
Answer 모델은 질문에 대한 답변에 해당되므로 Question 모델을 속성으로 가져가야 한다.
기존 모델을 속성으로 연결하려면 ForeignKey를 사용해야 한다.
main.apps.MainConfig를 INSTALLED_APPS 항목에 추가한다.
모델을 변경 혹은 신규로 생성되면 makemigrations 명령어를 수행해야한다.
python manage.py makemigrations
makemigrations 명령을 수행하더라도 실제로 테이블이 생성되지는 않는다.
makemigrations 명령은 장고가 테이블 작업을 수행하기 위한 작업 파일(예: 0001_initial.py)을 생성하는 명령어다. 실제 테이블 작업은 migrate 명령을 통해서만 가능하다.
python manage.py migrate
만들어진 모델을 관리지가 관리 할 수 있도록 admin.py에 정보를 추가해주는 과정이 필요하다.
쉘에서 수행하는 데이터 저장, 수정, 삭제 등의 작업을 장고 admin 페이지에서 처리할 수 있게된다.
모델이 추가되었음을 볼 수 있다.
Add를 통해 모델에 정의한 형태의 Form을 볼 수 있다.
Save : 해당 유형의 객체에 대한 변경사항을 저장하고, 변경된 목록 페이지를 보여준다.
Save and another : 변경사항을 저장하고, 해당 유형의 객체에 대한 비어있는 새로운 입력창을 보여준다.
Save and continue editing : 해당 객체에 대한 변경사항을 저장하고, 현재 편집창을 갱신한다.