본문 바로가기

Django/따라하는 장고

5. 장고 모델 작성법

[ migrate ]

 

장고는 모델을 이용해 데이터베이스를 처리한다.

python manage.py runserver 실행시 나오는 문구를 보면 

빨간 글자로 경고문이 나온다

18개의 적용되지않은 mirgrations 들이 있다. admin, auth, contenttypes, sessions 앱에 migration을 적용하기전까지 프로젝트가 정상적으로 작동하지 않을것이라고 한다. python manage.py migrate 명령어로 적용하라고 한다. admin, auth, contenttypes, sessions 앱들은 장고 프로젝트 생성시 기본설치되는 앱이다. 설치된 앱은 config/settings.py 에 적혀있다. 

config/settings.py 를 잘 살펴보자

경고문에 적힌 앱들말고도 messages, staticfiles 앱들도 있는데 이 두개의 앱은 데이터베이스와 관련이 없어서 경고문에 나오지 않은것이라고 한다. 

config/settings.py 파일을 잘 살펴보면 데이터베이스에 관한 정보도 같이 들어있다.

데이터베이스의 엔진은 django.cbb.backends.sqlite3 이고 데이터베이스 파일의 위치는 BASE_DIR 디렉토리 밑에 db.sqlite3 파일에 저장되어있다. BASE_DIR은 프로젝트 디렉토리로 나는 /Users/<사용자명>/projects/mysite 이다.

이제 경고문이 하라는대로 python manage.py migrate 명령을 실행해 해당하는 앱들이 필요로 하는 데이터베이스 테이블들을 생성하자.

자동으로 진행이 된다

명령어를 실행하면 각 앱들이 사용하는 테이블들이 자동으로 생성된다.

 

[ DB Browser for SQLite ]

 

생성된 테이블들은 SQLite 의 GUI 도구인 "DB Browser for SQLite"를 설치하면 볼수 있다.

https://sqlitebrowser.org/dl/ 링크에 들어가 설치를 하자.

첫 화면이 나온다

[ 데이터베이스 열기 -> /Users/<사용자명>/projects/mysite/db.sqlite3 ] 파일을 선택하자.

이런 화면이 나온다

정확히 무슨 내용인지 자세히 볼 필요는 없다. 장고의 장점 중 하나는 테이블 작업을 위해 직접 쿼리문을 수행하지 않아도 된다는 점이다. 장고의 ORM을 사용하면 쿼리문을 몰라도 데이터 작업을 쉽게 할 수 있다. 여기서 쿼리문이란 데이터베이스의 데이터를 생성, 조회, 수정, 삭제하기위해 사용하는 문법이다.

 

[ 모델 작성법 ]

 

우리가 만드는 pybo 라는 게시판은 질문과 답변을 할 수 있는 파이썬 게시판 서비스이다. 그러므로 질문과 답변에 해당하는 데이터 모델이 있어야만 한다.

 

질문과 답변 모델에는 어떤 속성들이 필요할까? 만드는 사람에 따라 다르겠지만 일반적으로 질문의 제목,질문의 내용, 질문한 날짜 가 필요하고 답변에는 받은 질문,답변의 내용,답변한 날짜가 필요하다. 

정리해보자면 

Question 모델에 들어갈 속성들은 : subject,content,create_date 가 들어가고

Answer 모델에 들어갈 속성들은 : question, content,create_date 속성들이 들어갈 것이다. 이것을바탕으로 pybo/models.py 에 작성해보면

보면 대충 이해할 수 있는데, Question 모델에 subject(제목)속성, content(내용)속성, create_date(작성날짜)속성이 들어있고, subject에는 최대 200글자까지 가능한 CharField()를 사용했고, content에는 글자수 제한이 없는 TextField()를 사용했고, create_date 속성에는 날짜와시간에 관계된 속성인 DateTimeField 를 사용했다.

 

Answer 모델에는 질문에 답변을 해야하므로 Question 모델을 속성으로 가진다. 기존의 모델을 속성으로 연결을 하려면 ForeignKey 를 사용해야한다. on_delete=models.CACADE 는 Answer 모델과 연결된 Question, 질문이 삭제 될 경우 답변도 같이 삭제된다는 의미이다. 

 

[ 테이블 생성 ]

 

이제 이 모델들을 이용해 테이블을 생성해야한다. 일단 config/setting.py 에있는 저번에 봤던 INSTALLED_APPS 에 항목을 추가해야한다.

맨 윗줄에 추가했다

추가한 pybo.apps.PyboConfig 클래스는 pybo/apps.py 파일에 있는 클래스이다. pybo 앱 생성시 자동으로 만들어지는 파일이라 따로 만들 필요는없다. 

 

이제 테이블 생성을 위해 python manage.py migrate 명령어를 쳐보면,

또 경고문이 나온다

경고문의 의미는 pybo 가 아직 migration 에 반영되지 않는 변경 사항이 있으므로 적용되지 않는다. 'manage.py makemigrations' 명령어를 수행해서 새 migrations 를 만들고, 'manage.py migrate' 명령을 다시 수행해서 적용시켜라. 라는 뜻이다. 그럼 하라는대로 python manage.py makemigrations 명령을 수행하면,

model Question 과 Answer과 생성되었다

makemigrations 명령어는 모델을 생성하거나 변화가 있었을 경우에 실행해야 하는 명령이다. 위 명령을 실행하면 pybo/migrations/0001_initail.py 파일이 자동으로 생성된다.

 

이제 다시 python manage.py migrate 명령어를 수행하면

이제야 문제없이 된다

경고문이 안뜨고 명령어가 잘 실행된다. migrate 명령으로 실제 테이블을 생성한것이다. 오류없이 잘 실행된것을 확인하려 전에 깔았던 

DB Browser for SQLite를 확인해보면,

테이블들이 추가되었다

question 테이블과 answer 테이블이 잘 추가된것을 확인할 수 있다.

'Django > 따라하는 장고' 카테고리의 다른 글

7. 장고 관리자  (1) 2022.10.17
6. 모델 사용법  (0) 2022.10.13
4. 파이참의 기본 요소  (0) 2022.10.12
3. 파이참 사용하기  (0) 2022.10.11
2. 장고 프로젝트 생성  (0) 2022.10.11