cf. 설치된 앱과 데이터베이스 정보 확인하기
config/settings.py파일을 열어 확인할 수 있다.
admin, auth, contenttypes, sessions,messages,staticfiles 앱이 기본으로 설치되어 있음을 볼 수 있다.
# Application definition
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
...생략...
# Database
# https://docs.djangoproject.com/en/3.2/ref/settings/#databases
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
cf. migrate로 테이블 생성 하기
사실 서버 구동할때 살짝쿵 무시해왔던게 있다.
You have 18 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
migration이 뭘까하고 검색해봤더니 "이주"라는 뜻으로... 데이터베이스에 테이블, 필드 등의 변경이 발생했을 때 지정된 데이터베이스에 적용 하는 과정을 의미하며 model.py에 정의된 모델의 생성/변경 내역을 관리, 데이터 베이스에 적용하는 기능을 제공하여 손쉽게 데이터베이스의 구조를 바꿀 수 있게 한다....라고 한다.
뭔지 잘 모르겠다
장고에서 제공하는 데이터베이스(sqlite)에서 사용할 테이블을 생성하는 밑바탕작업...정도로 이해하고 넘어갔다.
migrate 명령을 통해 기본으로 설치되어 있는 admin, auth, contenttypes, sessions앱이 필요한 테이블을 생성했다.
(messages,staticfiles앱은 데이터베이스와 무관하므로 배제되었다)
PS C:\DjangoProject\mysite> python manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, contenttypes, sessions
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... O
K
Applying auth.0008_alter_user_username_max_length... OK
Applying auth.0009_alter_user_last_name_max_length... OK
Applying auth.0010_alter_group_name_max_length... OK
Applying auth.0011_update_proxy_permissions... OK
Applying auth.0012_alter_user_first_name_max_length... OK
Applying sessions.0001_initial... OK
모델 생성하기
위의 내용을 숙지했다면 이제 모델을 만들 수 있다.
파이보를 질문답변게시판으로 만들기 위해 질문과 답변 모델을 만들어 볼 것이다.
1.pybo/models.py에 질문답변모델 작성하기
from django.db import models
# Create your models here.
class Question(models.Model): #질문모델 생성
subject=models.CharField(max_length=200) #속성1. 제목
content=models.TextField() #속성2. 내용
create_date=models.DateTimeField() #속성3. 작성일시
def __str__(self):
return self.subject
class Answer(models.Model): #답변모델 생성
question=models.ForeignKey(Question, on_delete=models.CASCADE) #속성1. 질문
content=models.TextField() #속성2.내용
create_date=models.DateTimeField() #속성3. 작성일시
def __str__(self):
return self.subject #데이터 조회시 id가 아닌 제목을 표시해줌
답변모델은 어떤질문의 답변인지 알기 위해 질문모델을 속성으로 사용해야한다.
이때 다른모델과의 연결을 위해 ForeignKey를 사용함을 알아두자.
2.config/settings.py에 pybo앱 등록하기
장고는 모델을 이용하여 데이터베이스의 실체가 될 테이블을 만드는데, 모델은 앱에 종속되어 있다.
그러므로 pybo/models을 인식하기 위해선 pybo/apps를 등록해야한다.
pybo/apps을 열어보자. pybo앱을 만들때 자동으로 생성된 PyboConfig클래스를 확인할 수있다.
from django.apps import AppConfig
class PyboConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'pybo'
PyboConfig클래스를 장고가 인식하고 데이터베이스 작업을 할 수 있도록 config/settings.py에 pybo앱을 등록한다.
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'pybo.apps.PyboConfig'
]
3. migrate로 테이블 생성하기
PS C:\DjangoProject\mysite> python manage.py makemigrations
Migrations for 'pybo':
pybo\migrations\0001_initial.py
- Create model Question
- Create model Answer
PS C:\DjangoProject\mysite> python manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, contenttypes, pybo, ses
sions
Running migrations:
Applying pybo.0001_initial... OK
모델이 생성되거나 변경된 경우 먼저 makemigrations 명령으로 테이블작업 수행을 위한 파일을 생성한다.
그 후 migrate 명령을 실행하면 장고는 등록된 앱에 있는 모델을 참고하여 실제 테이블을 생성한다.
▼Reference
'IT > Web programming' 카테고리의 다른 글
장고(Django) html파일 연동하기: Template (0) | 2022.02.21 |
---|---|
장고(Django) 앱 생성하기: View (0) | 2022.02.21 |
장고(Django) 프로젝트 생성하기 (0) | 2022.02.20 |
아나콘다 가상환경 설정과 라이브러리 설치 (0) | 2022.02.19 |
class,id,link 태그를 이용해 html에 css 적용하기 (0) | 2022.02.15 |