python/Django

[Django] 3. 모델 적용

끼발자 2021. 12. 21. 14:49
반응형

장고가 플라스크보다 편리한 점중 하나가 바로 db를 알아서 생성해준다는 것이다.

 

나는 이미 어느정도 진행한 상태에서 포스트를 적느라 메세지가 뜨진 않지만,

 

책에 써있는대로 따라가다보면 서버를 구동시킬 때,

 

You have 18 unapplied migration(s) 

...

 

이런 경고메세지가 보인다.

 

바로 아래에 RUN 'python manage.py migrate' 라고 써 있는걸 보니

 

저 커맨드를 입력하면 해결되나보다. 터미널에 저 명령어를 입력하고 실행하자.

 

그럼 왜 저런 경고메세지가 나올까?

 

config/settings.py 를 확인해보면,

 

...
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]
...

경고문구에 있던 아이들이 여기 적혀있다. 데이터베이스에 적용되지 않아 경고문구가 확인되었고,

 

migrate를 통해 앱이 필요로 하는 모델을 생성해준 것이다.

 

admin, auth, sessions등 db를 사용하는데, 장고를 사용한다면 테이블명을 몰라도 사용이 가능하다.

 

ORM이라는 기능을 지원하기 때문인데,

ORM은 

https://gmlwjd9405.github.io/2019/02/01/orm.html

 

위의 링크에 설명되어있다.

 

간단하게 말하자면 여러 데이터베이스에 따라 쿼리문을 다르게 짜야하는게 아니라, 

 

특정 명령을 db에 맞게 수정해주는 기능이라고 생각하면 쉽다.

 

즉 SQL 쿼리를 모르더라도 데이터베이스를 조작할 수 있다!

 

settings를 열어본 김에, 한글과 서울시간으로 바꿔보자,

 

# config/settings.py
...

# Internationalization
# https://docs.djangoproject.com/en/4.0/topics/i18n/

LANGUAGE_CODE = 'ko-kr'

TIME_ZONE = 'Asia/Seoul'
...

이렇게 바꿔주면, 초기화면이 한글로 표기된다.

 

그러면 이제 DB 모델을 구성해보자.

 

pybo/models.py를 열어보자.

 

우리는 질문과 답변 게시판을 만들 예정이니 

 

Question / Answer class로 모델을 만들자.

 

from django.db import models

# Create your models here.

class Question(models.Model):
    subject = models.CharField(max_length=200) # 글자 수 제한하려면 charField
    content = models.TextField() # 글자수 제한 X
    create_date = models.DateTimeField() # 시간


class Answer(models.Model):
    question = models.ForeignKey(Question,on_delete=models.CASCADE) # 질문에 대한 답변이므로 foreinkey , 질문과 함께 삭제
    content = models.TextField()
    create_date = models.DateTimeField()

 

답변은 반드시 질문과 함께 와야하므로, 외래키에 Question을 속성으로 가지게 만들자. 뒤의 on_delete는

 

질문이 삭제되면 답변도 동시에 삭제되는 옵션이다.

 

테이블에 대한 정의가 끝났다면, 앞서 설명했던 config/settings.py의 INSTALLED_APPS에 모델을 추가해주자.

 

# config/settings.py
...

INSTALLED_APPS = [
    'pybo.apps.PyboConfig', # migration에 사용됨
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

...

 여기서 PyboConfig는 pybo/apps.py 에 있는 클래스이다. 서비스생성시에 자동으로 생성된다.

 

위의 INSATLLED_APPS에 PyboConfig를 등록하지 않으면, 열심히 만든 모델을 장고가 인식하지 못 하니 주의하자.

 

우선 모델이 생성되거나 변경되었을 때, migrate보다 먼저 

 

python manage.py makemigrations 를 통해 테이블 작업 파일을 만들어준 다음

 

python manage.py migrate 를 실행해서 테이블을 만들자.

 

더보기

pybo/migrations에 작업 상황이 생성되고, 구체적인 sql 쿼리문을 보려면

python manage.py sqlmigrate pybo 0001 이렇게 명령해주면 된다.

0001 / 0002 이런식으로 파일이 구성되니 보고싶은 id를 적어주자.

반응형

'python > Django' 카테고리의 다른 글

[Django] 6. 장고 템플릿 구현  (0) 2021.12.22
[Django] 5. 장고 Admin 활용  (0) 2021.12.22
[Django] 4. 장고 셸을 이용해 데이터 만들기  (0) 2021.12.21
[Django] 2. 서비스 생성  (0) 2021.12.21
[Django] 1. 장고 시작  (0) 2021.12.21